library(dplyr)
library(readxl)
library(psych)
library(lattice)
library(ggplot2)
library(lavaan)
library(magrittr)
library(broom)

options(digits = 3)
theme_set(theme_classic())

dat <- read_xlsx("./Dissertation Data/dissertationdataCOMPLETE.xlsx")

1 Scale Reliabilities

1.1 Org Dehumanization

dat %>%
  select(orgdehum_1:orgdehum_11) %>%
  as.data.frame(.) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.93 0.94 0.95 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
               1    2    3    4    5    6    7 miss
orgdehum_1  0.07 0.14 0.17 0.13 0.25 0.16 0.06    0
orgdehum_2  0.09 0.18 0.16 0.16 0.13 0.09 0.17    0
orgdehum_3  0.13 0.15 0.14 0.15 0.18 0.09 0.15    0
orgdehum_4  0.10 0.16 0.16 0.13 0.21 0.11 0.13    0
orgdehum_5  0.07 0.10 0.14 0.15 0.28 0.15 0.10    0
orgdehum_6  0.09 0.17 0.20 0.14 0.17 0.11 0.12    0
orgdehum_7  0.13 0.16 0.17 0.13 0.17 0.10 0.13    0
orgdehum_8  0.10 0.12 0.16 0.14 0.23 0.12 0.13    0
orgdehum_9  0.28 0.28 0.15 0.07 0.08 0.05 0.08    0
orgdehum_10 0.24 0.26 0.15 0.09 0.09 0.05 0.11    0
orgdehum_11 0.27 0.26 0.14 0.08 0.11 0.06 0.08    0

***Alpha improves to .96 if Item 1 is dropped

1.2 HR Attributions

dat %>%
  select(exploit_1:wbatt_3) %>%
  psych::alpha(.)
Some items were negatively correlated with the total scale and probably 
should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Some items ( exploit_1 exploit_2 exploit_3 cost_1 cost_2 cost_3 ) were negatively correlated with the total scale and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.63 0.68 0.74 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
exploit_1 0.14 0.24 0.14 0.13 0.14 0.09 0.12    0
exploit_2 0.16 0.32 0.19 0.12 0.11 0.07 0.02    0
exploit_3 0.13 0.28 0.14 0.12 0.17 0.09 0.06    0
cost_1    0.08 0.11 0.07 0.14 0.23 0.18 0.19    0
cost_2    0.05 0.07 0.06 0.10 0.31 0.21 0.18    0
cost_3    0.05 0.13 0.09 0.16 0.23 0.18 0.16    0
perfatt_1 0.05 0.08 0.08 0.16 0.20 0.32 0.11    0
perfatt_2 0.07 0.08 0.09 0.16 0.19 0.29 0.12    0
perfatt_3 0.04 0.02 0.05 0.08 0.24 0.36 0.20    0
wbatt_1   0.09 0.10 0.12 0.14 0.21 0.23 0.10    0
wbatt_2   0.09 0.10 0.09 0.14 0.22 0.23 0.12    0
wbatt_3   0.08 0.11 0.09 0.14 0.24 0.22 0.12    0

Horrible alpha, as expected. Scale consists of two conceptually distinct factors.

1.3 Exploitation Attributions

dat %>%
  select(exploit_1:exploit_3) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.86 0.88 0.9 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
exploit_1 0.14 0.24 0.14 0.13 0.14 0.09 0.12    0
exploit_2 0.16 0.32 0.19 0.12 0.11 0.07 0.02    0
exploit_3 0.13 0.28 0.14 0.12 0.17 0.09 0.06    0

1.4 Cost-saving Attributions

dat %>%
  select(cost_1:cost_3) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.89 0.9 0.92 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
          1    2    3    4    5    6    7 miss
cost_1 0.08 0.11 0.07 0.14 0.23 0.18 0.19    0
cost_2 0.05 0.07 0.06 0.10 0.31 0.21 0.18    0
cost_3 0.05 0.13 0.09 0.16 0.23 0.18 0.16    0

1.5 Performance Attributions

dat %>%
  select(perfatt_1:perfatt_3) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.84 0.86 0.88 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
perfatt_1 0.05 0.08 0.08 0.16 0.20 0.32 0.11    0
perfatt_2 0.07 0.08 0.09 0.16 0.19 0.29 0.12    0
perfatt_3 0.04 0.02 0.05 0.08 0.24 0.36 0.20    0

Alpha improves to .93 if Item 3 dropped

1.6 Well-being Attributions

dat %>%
  select(wbatt_1:wbatt_3) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.93 0.94 0.95 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
           1    2    3    4    5    6    7 miss
wbatt_1 0.09 0.10 0.12 0.14 0.21 0.23 0.10    0
wbatt_2 0.09 0.10 0.09 0.14 0.22 0.23 0.12    0
wbatt_3 0.08 0.11 0.09 0.14 0.24 0.22 0.12    0

1.7 BLM

dat %>%
  select(sblm_1:sblm_4) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.95 0.96 0.97 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
          1    2    3    4    5    6    7 miss
sblm_1 0.16 0.21 0.19 0.09 0.15 0.12 0.08    0
sblm_2 0.18 0.24 0.21 0.08 0.13 0.09 0.07    0
sblm_3 0.21 0.19 0.20 0.08 0.11 0.11 0.09    0
sblm_4 0.22 0.23 0.18 0.09 0.09 0.10 0.08    0

1.8 SOE

dat %>%
  select(soe_1:soe_9) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.91 0.92 0.93 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
         1    2    3    4    5    6    7 miss
soe_1 0.03 0.09 0.11 0.11 0.29 0.27 0.10    0
soe_2 0.03 0.06 0.07 0.09 0.26 0.33 0.15    0
soe_3 0.05 0.06 0.12 0.12 0.28 0.27 0.10    0
soe_4 0.05 0.07 0.10 0.11 0.27 0.28 0.11    0
soe_5 0.01 0.04 0.08 0.09 0.36 0.31 0.10    0
soe_6 0.01 0.05 0.08 0.12 0.30 0.30 0.13    0
soe_7 0.02 0.05 0.09 0.10 0.30 0.30 0.13    0
soe_8 0.01 0.03 0.06 0.10 0.26 0.36 0.18    0
soe_9 0.01 0.04 0.09 0.13 0.28 0.32 0.13    0

1.9 Job Satisfaction

dat %>%
  select(jobsat_1:jobsat_3) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.95 0.96 0.97 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
jobsat_1  0.06 0.08 0.07 0.05 0.23 0.34 0.17    0
jobsat_2r 0.05 0.08 0.09 0.07 0.14 0.29 0.27    0
jobsat_3  0.04 0.06 0.07 0.06 0.21 0.34 0.19    0

1.10 Affective Commitment

dat %>%
  select(acommit_1:acommit_6) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.92 0.93 0.94 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
acommit_1 0.13 0.10 0.08 0.14 0.18 0.25 0.12    0
acommit_2 0.13 0.15 0.11 0.14 0.26 0.15 0.05    0
acommit_3 0.07 0.10 0.14 0.08 0.18 0.25 0.16    0
acommit_4 0.10 0.08 0.15 0.11 0.22 0.18 0.16    0
acommit_5 0.09 0.09 0.11 0.10 0.22 0.19 0.19    0
acommit_6 0.11 0.10 0.11 0.15 0.24 0.18 0.10    0

1.11 Turnover Intentions

dat %>%
  select(tointent_1:tointent_2) %>%
  psych::alpha(.)
data length [16] is not a sub-multiple or multiple of the number of columns [10]

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.9 0.92 0.93 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
              1    2    3    4    5    6    7 miss
tointent_1 0.25 0.26 0.11 0.08 0.10 0.10 0.10    0
tointent_2 0.28 0.20 0.12 0.11 0.11 0.06 0.12    0

1.12 Burnout

dat %>%
  select(diseng_1r:exhaust_8r) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.92 0.93 0.94 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
              1    2    3    4    5    6    7 miss
diseng_1r  0.07 0.24 0.35 0.07 0.12 0.11 0.05    0
exhaust_1  0.03 0.08 0.08 0.07 0.29 0.28 0.16    0
diseng_2   0.17 0.25 0.15 0.10 0.13 0.09 0.09    0
exhaust_2  0.13 0.21 0.15 0.13 0.18 0.13 0.07    0
exhaust_3r 0.15 0.33 0.32 0.09 0.05 0.04 0.01    0
diseng_3   0.11 0.22 0.18 0.14 0.19 0.10 0.06    0
diseng_4r  0.10 0.29 0.27 0.10 0.11 0.08 0.05    0
exhaust_4  0.09 0.21 0.20 0.12 0.18 0.12 0.08    0
diseng_5   0.08 0.15 0.13 0.14 0.25 0.16 0.08    0
exhaust_5r 0.08 0.24 0.30 0.13 0.11 0.09 0.03    0
diseng_6   0.29 0.26 0.15 0.09 0.10 0.07 0.03    0
exhaust_6  0.11 0.17 0.16 0.13 0.21 0.11 0.09    0
diseng_7r  0.03 0.10 0.22 0.09 0.15 0.21 0.19    0
exhaust_7r 0.20 0.43 0.24 0.08 0.02 0.01 0.01    0
diseng_8r  0.07 0.18 0.27 0.19 0.13 0.10 0.05    0
exhaust_8r 0.05 0.21 0.29 0.16 0.14 0.08 0.06    0

1.13 Burnout: Disengagement

dat %>%
  select(diseng_1r, diseng_2, diseng_3, diseng_4r, diseng_5, diseng_6, diseng_7r, diseng_8r) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.86 0.88 0.9 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
             1    2    3    4    5    6    7 miss
diseng_1r 0.07 0.24 0.35 0.07 0.12 0.11 0.05    0
diseng_2  0.17 0.25 0.15 0.10 0.13 0.09 0.09    0
diseng_3  0.11 0.22 0.18 0.14 0.19 0.10 0.06    0
diseng_4r 0.10 0.29 0.27 0.10 0.11 0.08 0.05    0
diseng_5  0.08 0.15 0.13 0.14 0.25 0.16 0.08    0
diseng_6  0.29 0.26 0.15 0.09 0.10 0.07 0.03    0
diseng_7r 0.03 0.10 0.22 0.09 0.15 0.21 0.19    0
diseng_8r 0.07 0.18 0.27 0.19 0.13 0.10 0.05    0

1.14 Burnout: Exhaustion

dat %>%
  select(exhaust_1, exhaust_2, exhaust_3r, exhaust_4, exhaust_5r, exhaust_6, exhaust_7r, exhaust_8r) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.86 0.87 0.89 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
              1    2    3    4    5    6    7 miss
exhaust_1  0.03 0.08 0.08 0.07 0.29 0.28 0.16    0
exhaust_2  0.13 0.21 0.15 0.13 0.18 0.13 0.07    0
exhaust_3r 0.15 0.33 0.32 0.09 0.05 0.04 0.01    0
exhaust_4  0.09 0.21 0.20 0.12 0.18 0.12 0.08    0
exhaust_5r 0.08 0.24 0.30 0.13 0.11 0.09 0.03    0
exhaust_6  0.11 0.17 0.16 0.13 0.21 0.11 0.09    0
exhaust_7r 0.20 0.43 0.24 0.08 0.02 0.01 0.01    0
exhaust_8r 0.05 0.21 0.29 0.16 0.14 0.08 0.06    0

****Alpha improves to .88 if Item 7r dropped

1.15 Task Performance

dat %>%
  select(perf_1:perf_5) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.82 0.85 0.87 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
          1    2    3    4    5    6    7 miss
perf_1 0.00 0.01 0.01 0.02 0.12 0.44 0.39    0
perf_2 0.00 0.00 0.01 0.03 0.10 0.44 0.43    0
perf_3 0.00 0.00 0.00 0.02 0.11 0.42 0.43    0
perf_4 0.00 0.00 0.00 0.03 0.11 0.41 0.44    0
perf_5 0.02 0.02 0.02 0.08 0.16 0.39 0.30    0

****Alpha improves to .897 if Item 5 dropped

1.16 OCBs

dat %>%
  select(ocb_1:ocb_10) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.83 0.85 0.87 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
          1    2    3    4    5 miss
ocb_1  0.07 0.28 0.28 0.27 0.09    0
ocb_2  0.05 0.20 0.35 0.30 0.09    0
ocb_3  0.11 0.35 0.31 0.17 0.06    0
ocb_4  0.03 0.16 0.32 0.33 0.16    0
ocb_5  0.04 0.20 0.38 0.30 0.08    0
ocb_6  0.05 0.14 0.34 0.31 0.16    0
ocb_7  0.16 0.27 0.33 0.18 0.07    0
ocb_8  0.25 0.30 0.31 0.12 0.02    0
ocb_9  0.38 0.33 0.19 0.07 0.02    0
ocb_10 0.19 0.26 0.25 0.22 0.08    0

1.17 CWBs

dat %>%
  select(cwb_1:cwb_10) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.79 0.82 0.84 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
          1    2    3    4    5 miss
cwb_1  0.81 0.14 0.04 0.01 0.00    0
cwb_2  0.39 0.35 0.15 0.08 0.03    0
cwb_3  0.67 0.20 0.06 0.04 0.02    0
cwb_4  0.55 0.32 0.09 0.02 0.02    0
cwb_5  0.49 0.46 0.04 0.01 0.00    0
cwb_6  0.86 0.09 0.03 0.01 0.00    0
cwb_7  0.85 0.11 0.02 0.00 0.01    0
cwb_8  0.63 0.28 0.05 0.02 0.01    0
cwb_9  0.81 0.16 0.02 0.01 0.00    0
cwb_10 0.82 0.14 0.03 0.00 0.01    0

1.18 POS

dat %>%
  select(pos_1:pos_8) %>%
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.94 0.94 0.95 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
         1    2    3    4    5    6    7 miss
pos_1 0.09 0.12 0.10 0.13 0.24 0.22 0.09    0
pos_2 0.03 0.06 0.07 0.09 0.30 0.27 0.17    0
pos_3 0.08 0.08 0.08 0.14 0.25 0.23 0.14    0
pos_4 0.01 0.04 0.05 0.13 0.32 0.32 0.14    0
pos_5 0.05 0.09 0.12 0.17 0.26 0.20 0.11    0
pos_6 0.10 0.08 0.17 0.16 0.19 0.18 0.12    0
pos_7 0.06 0.09 0.10 0.15 0.20 0.22 0.18    0
pos_8 0.07 0.07 0.12 0.15 0.27 0.21 0.11    0

2 Factor Structures

2.1 Examine HR Attributions Factor Structure

hratt.model <- 'exploit =~ exploit_1 + exploit_2 + exploit_3
                cost =~ cost_1 + cost_2 + cost_3
                perform =~ perfatt_1 + perfatt_2 + perfatt_3
                wb =~ wbatt_1 + wbatt_2 + wbatt_3'

hratt.fit <- cfa(hratt.model, data = dat)
summary(hratt.fit, fit.measures = TRUE)
lavaan 0.6-6 ended normally after 56 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         30
                                                      
  Number of observations                           401
                                                      
Model Test User Model:
                                                      
  Test statistic                               175.331
  Degrees of freedom                                48
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4194.543
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.969
  Tucker-Lewis Index (TLI)                       0.958

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -7479.088
  Loglikelihood unrestricted model (H1)      -7391.423
                                                      
  Akaike (AIC)                               15018.176
  Bayesian (BIC)                             15137.995
  Sample-size adjusted Bayesian (BIC)        15042.802

Root Mean Square Error of Approximation:

  RMSEA                                          0.081
  90 Percent confidence interval - lower         0.069
  90 Percent confidence interval - upper         0.094
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.047

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  exploit =~                                          
    exploit_1         1.000                           
    exploit_2         0.740    0.040   18.591    0.000
    exploit_3         0.928    0.043   21.564    0.000
  cost =~                                             
    cost_1            1.000                           
    cost_2            0.935    0.042   22.406    0.000
    cost_3            0.998    0.045   22.406    0.000
  perform =~                                          
    perfatt_1         1.000                           
    perfatt_2         1.064    0.035   30.202    0.000
    perfatt_3         0.604    0.041   14.744    0.000
  wb =~                                               
    wbatt_1           1.000                           
    wbatt_2           1.091    0.036   30.307    0.000
    wbatt_3           1.059    0.036   29.359    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  exploit ~~                                          
    cost              1.838    0.189    9.719    0.000
    perform          -0.674    0.147   -4.588    0.000
    wb               -1.077    0.161   -6.697    0.000
  cost ~~                                             
    perform          -0.693    0.137   -5.046    0.000
    wb               -1.075    0.151   -7.096    0.000
  perform ~~                                          
    wb                2.052    0.177   11.581    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .exploit_1         0.930    0.106    8.756    0.000
   .exploit_2         0.978    0.085   11.487    0.000
   .exploit_3         0.708    0.087    8.125    0.000
   .cost_1            0.964    0.092   10.533    0.000
   .cost_2            0.593    0.067    8.909    0.000
   .cost_3            0.675    0.076    8.910    0.000
   .perfatt_1         0.449    0.053    8.394    0.000
   .perfatt_2         0.345    0.054    6.387    0.000
   .perfatt_3         1.273    0.094   13.546    0.000
   .wbatt_1           0.739    0.062   11.884    0.000
   .wbatt_2           0.324    0.042    7.730    0.000
   .wbatt_3           0.396    0.044    9.059    0.000
    exploit           2.870    0.273   10.501    0.000
    cost              2.506    0.243   10.302    0.000
    perform           2.309    0.197   11.726    0.000
    wb                2.539    0.228   11.133    0.000

****Acceptable fit measures

2.2 Examine Burnout Factor Structure

burnout.model <- 'disengage =~ diseng_1r + diseng_2 + diseng_3 + diseng_4r + diseng_5 + diseng_6 + diseng_7r + diseng_8r
exhaustion =~ exhaust_1 + exhaust_2 + exhaust_3r + exhaust_4 + exhaust_5r + exhaust_6 + exhaust_7r + exhaust_8r'

burnout.fit <- cfa(burnout.model, data = dat)
summary(burnout.fit, fit.measures = TRUE)
lavaan 0.6-6 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         33
                                                      
  Number of observations                           401
                                                      
Model Test User Model:
                                                      
  Test statistic                               845.533
  Degrees of freedom                               103
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4023.365
  Degrees of freedom                               120
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.810
  Tucker-Lewis Index (TLI)                       0.778

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10681.525
  Loglikelihood unrestricted model (H1)     -10258.758
                                                      
  Akaike (AIC)                               21429.050
  Bayesian (BIC)                             21560.850
  Sample-size adjusted Bayesian (BIC)        21456.139

Root Mean Square Error of Approximation:

  RMSEA                                          0.134
  90 Percent confidence interval - lower         0.126
  90 Percent confidence interval - upper         0.143
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.085

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  disengage =~                                        
    diseng_1r         1.000                           
    diseng_2          1.307    0.079   16.649    0.000
    diseng_3          0.924    0.072   12.763    0.000
    diseng_4r         1.112    0.067   16.647    0.000
    diseng_5          1.049    0.073   14.321    0.000
    diseng_6          0.760    0.072   10.531    0.000
    diseng_7r         0.773    0.077   10.062    0.000
    diseng_8r         1.123    0.065   17.361    0.000
  exhaustion =~                                       
    exhaust_1         1.000                           
    exhaust_2         1.516    0.130   11.676    0.000
    exhaust_3r        0.812    0.086    9.430    0.000
    exhaust_4         1.625    0.131   12.405    0.000
    exhaust_5r        1.168    0.106   11.016    0.000
    exhaust_6         1.650    0.133   12.373    0.000
    exhaust_7r        0.520    0.070    7.454    0.000
    exhaust_8r        1.220    0.109   11.199    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  disengage ~~                                        
    exhaustion        0.933    0.109    8.537    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .diseng_1r         1.167    0.092   12.702    0.000
   .diseng_2          1.221    0.104   11.765    0.000
   .diseng_3          1.771    0.133   13.344    0.000
   .diseng_4r         0.884    0.075   11.767    0.000
   .diseng_5          1.538    0.119   12.945    0.000
   .diseng_6          2.087    0.152   13.693    0.000
   .diseng_7r         2.436    0.177   13.745    0.000
   .diseng_8r         0.700    0.063   11.074    0.000
   .exhaust_1         1.635    0.121   13.489    0.000
   .exhaust_2         1.435    0.116   12.389    0.000
   .exhaust_3r        1.220    0.090   13.567    0.000
   .exhaust_4         0.947    0.086   11.059    0.000
   .exhaust_5r        1.239    0.096   12.948    0.000
   .exhaust_6         1.006    0.090   11.149    0.000
   .exhaust_7r        1.069    0.077   13.883    0.000
   .exhaust_8r        1.227    0.096   12.823    0.000
    disengage         1.445    0.170    8.502    0.000
    exhaustion        0.849    0.137    6.193    0.000

****Not very good fit


3 Descriptive Statistics


3.1 Demographics


3.1.1 Organization Type

dat %>%
  mutate(orgtype = recode(orgtype, `0` = "nonprofit", `1` = "for-profit")) %>%
  select(orgtype) %>%
  group_by(orgtype) %>%
  tally()

3.1.2 Organization Size

dat %>%
  mutate(orgsize = recode_factor(orgsize, `1` = "less than 10",
                          `2` = "10 to 49",
                          `3` = "50 to 99",
                          `4` = "100 to 499",
                          `5` = "500 to 999",
                          `6` = "1000 or more"), .ordered = TRUE) %>%
  select(orgsize) %>%
  group_by(orgsize) %>%
  tally()

dat %>%
  mutate(orgsize = recode_factor(orgsize, `1` = "less than 10",
                          `2` = "10 to 49",
                          `3` = "50 to 99",
                          `4` = "100 to 499",
                          `5` = "500 to 999",
                          `6` = "1000 or more"), .ordered = TRUE) %>%
  select(orgsize) %>%
  barchart(.)

3.1.3 Organization Levels

dat %>%
  mutate(orglevels = recode_factor(orglevels, `1` = "three or fewer levels",
                                   `2` = "four levels",
                                   `3` = "five levels",
                                   `4` = "six levels",
                                   `5` = "seven levels or more", .ordered = TRUE)) %>%
  select(orglevels) %>%
  group_by(orglevels) %>%
  tally()

dat %>%
  mutate(orglevels = recode_factor(orglevels, `1` = "three or fewer levels",
                                   `2` = "four levels",
                                   `3` = "five levels",
                                   `4` = "six levels",
                                   `5` = "seven levels or more", .ordered = TRUE)) %>%
  select(orglevels) %>%
  barchart(.)

3.1.4 Organization Centrality

dat %>%
  mutate(orgcent = recode_factor(orgcent, `1` = "CEO, president, or managing director",
                                 `2` = "corporate management",
                                 `3` = "branch management",
                                 `4` = "input from frontline employees",
                                 `5` = "other"), .ordered = TRUE) %>%
  select(orgcent) %>%
  group_by(orgcent) %>%
  tally()

dat %>%
  mutate(orgcent = recode_factor(orgcent, `1` = "CEO, president, or managing director",
                                 `2` = "corporate management",
                                 `3` = "branch management",
                                 `4` = "input from frontline employees",
                                 `5` = "other"), .ordered = TRUE) %>%
  select(orgcent) %>%
  barchart(.)

3.1.5 Region

dat %>%
  select(region) %>%
  group_by(region) %>%
  tally()

dat %>%
  select(region) %>%
  barchart(.)

3.1.6 Industry

dat %>%
  select(industry) %>%
  group_by(industry) %>%
  tally()

dat %>%
  select(industry) %>%
  barchart(.)

3.1.7 Employment Status

dat %>%
  mutate(status = recode(status, `0` = "full-time",
                         `1` = "part-time")) %>% # recode full-time = 0, part-time = 1
  select(status) %>%
  group_by(status) %>%
  tally()

3.1.8 Responsible for Direct Reports

dat %>%
  mutate(dirreport = recode(dirreport, `1` = "yes", `0` = "no")) %>%
  select(dirreport) %>%
  group_by(dirreport) %>%
  tally()

dat %>%
  mutate(dirreport = recode(dirreport, `1` = "yes", `0` = "no")) %>%
  select(dirreport) %>%
  barchart(.)

3.1.9 Salary

dat %>%
  mutate(salary = recode_factor(salary, `1` = "less than $10,000",
                                `2` = "$10,000 to $19,999",
                                `3` = "$20,000 to $29,999",
                                `4` = "$30,000 to $39,999",
                                `5` = "$40,000 to $49,999",
                                `6` = "$50,000 to $59,999",
                                `7` = "$60,000 to $69,999",
                                `8` = "$70,000 or more", .ordered = TRUE)) %>%
  select(salary) %>%
  group_by(salary) %>%
  tally()

dat %>%
  mutate(salary = recode_factor(salary, `1` = "less than $10,000",
                                `2` = "$10,000 to $19,999",
                                `3` = "$20,000 to $29,999",
                                `4` = "$30,000 to $39,999",
                                `5` = "$40,000 to $49,999",
                                `6` = "$50,000 to $59,999",
                                `7` = "$60,000 to $69,999",
                                `8` = "$70,000 or more", .ordered = TRUE)) %>%
  select(salary) %>%
  barchart(.)

3.1.10 Weekly Hours

dat %>%
  dplyr::select(weekhours)
dat %>%
  dplyr::select(weekhours) %>%
  filter(weekhours < 25)
dat %>%
  dplyr::select(weekhours) %>%
  filter(weekhours >= 40)
histogram(dat$weekhours, type = "count", breaks = c(7.5:72.5))

3.1.11 Gender

dat %>%
  mutate(gender = recode(gender, `0` = "male",
                                `1` = "female")) %>%
  select(gender) %>%
  group_by(gender) %>%
  tally()

dat %>%
  mutate(gender = recode_factor(gender, `0` = "male",
                               `1` = "female")) %>%
  select(gender) %>%
  barchart(.)

3.1.12 Age

dat %>%
  mutate(age = recode_factor(age, `1` = "18-24",
                             `2` = "25-30",
                             `3` = "31-40",
                             `4` = "41-50",
                             `5` = "51-60",
                             `6` = "over 60")) %>%
  select(age) %>%
  group_by(age) %>%
  tally()

dat %>%
  mutate(age = recode_factor(age, `1` = "18-24",
                             `2` = "25-30",
                             `3` = "31-40",
                             `4` = "41-50",
                             `5` = "51-60",
                             `6` = "over 60")) %>%
  select(age) %>%
  barchart(.)

3.1.13 Race

dat %>%
  select(race) %>%
  group_by(race) %>%
  tally()

dat %>%
  select(race) %>%
  barchart(.)

3.1.14 English First Language

dat %>%
  mutate(english = recode(english, `1` = "english first language",
                                 `0` = "english not first language")) %>%
  select(english) %>%
  group_by(english) %>%
  tally()

3.1.15 Marital Status

dat %>%
  select(marital) %>%
  group_by(marital) %>%
  tally()

dat %>%
  select(marital) %>%
  barchart(.)

3.1.16 Education

dat %>%
  mutate(edu = recode_factor(edu, `1` = "high school, GED",
                             `2` = "associates",
                             `3` = "college",
                             `4` = "masters",
                             `5` = "doctoral", .ordered = TRUE)) %>%
  select(edu) %>%
  group_by(edu) %>%
  tally()

dat %>%
    mutate(edu = recode_factor(edu, `1` = "high school, GED",
                             `2` = "associates",
                             `3` = "college",
                             `4` = "masters",
                             `5` = "doctoral", .ordered = TRUE)) %>%
  select(edu) %>%
  barchart(.)

NA

3.2 Constructs of Interest


3.2.1 HR Attributions

dat %>%
  select(exploitatt:wbatt) %>%
  psych::describe(.)

3.2.2 BLM, SOE, Org Dehumanization and POS

dat %>%
  select(sblm:pos) %>%
  psych::describe(.)

3.2.3 Outcome Variables

dat %>%
  select(jobsat:cwb) %>%
  psych::describe(.)

Noteworthy observations:

  • Exploitation attributions, BLM, and org dehumanization perceptions below scale midpoint

  • Sample appears to include mostly individuals with positive job attitudes and low on negative predictors


4 Bar Graphs and Histograms

4.1 Exploitation Attributions

histogram(dat$exploitatt, type = "count", breaks = c(0.5:7.5))

qqnorm(dat$exploitatt)
qqline(dat$exploitatt)

shapiro.test(dat$exploitatt)

    Shapiro-Wilk normality test

data:  dat$exploitatt
W = 0.9, p-value = 2e-10

Data appear to be positively skewed.

4.2 Well-being Attributions

histogram(dat$wbatt, type = "count", breaks = c(0.5:7.5))

qqnorm(dat$wbatt)
qqline(dat$wbatt)

shapiro.test(dat$wbatt)

    Shapiro-Wilk normality test

data:  dat$wbatt
W = 0.9, p-value = 8e-12

Negatively skewed.

4.3 BLM

histogram(dat$sblm, type = "count", breaks = c(0.5:7.5))

qqnorm(dat$sblm)
qqline(dat$sblm)

shapiro.test(dat$sblm)

    Shapiro-Wilk normality test

data:  dat$sblm
W = 0.9, p-value = 8e-13

Positively skewed.

4.4 SOE

histogram(dat$soe, type = "count", breaks = c(0.5:7.5))

qqnorm(dat$soe)
qqline(dat$soe)

shapiro.test(dat$soe)

    Shapiro-Wilk normality test

data:  dat$soe
W = 1, p-value = 1e-05

Negative skew.

4.5 Org Dehumanization

histogram(dat$orgdehum, type = "count", breaks = c(0.5:7.5))

qqnorm(dat$orgdehum)
qqline(dat$orgdehum)

shapiro.test(dat$orgdehum)

    Shapiro-Wilk normality test

data:  dat$orgdehum
W = 1, p-value = 1e-06

Positive skew.

**** Note: Variables of interest appear to be non-normal, which violates the assumptions for a significance test for correlations involving the variables.


5 Scatterplot Matrix

5.1 Antecedents and Org Dehumanization

library(car)
Loading required package: carData
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

Attaching package: ‘car’

The following object is masked from ‘package:psych’:

    logit

The following object is masked from ‘package:dplyr’:

    recode
dat %>%
  select(exploitatt, wbatt, sblm, soe, orgdehum) %>%
  scatterplotMatrix(.)

5.2 Org Dehumanization and Attitudes

dat %>%
  select(orgdehum, jobsat, acommit, tointent) %>%
  scatterplotMatrix(.)

5.3 Org Dehumanization and Burnout

dat %>%
  select(orgdehum, diseng, exhaust, burnout) %>%
  scatterplotMatrix(.)

5.4 Org Dehumanization and Performance

dat %>%
  select(orgdehum, perf, ocb, cwb) %>%
  scatterplotMatrix(.)


6 Primary Analyses


Load additional libraries and set default rounding value and graph theme.

library(effects)
library(lattice)
library(Hmisc)
library(xtable)

options(digits = 4)

theme_set(theme_classic())

6.1 Means and Standard Deviations

dat %>%
  select(orgdehum, exploitatt, wbatt, sblm, soe, jobsat, acommit, burnout, tointent, perf, ocb, cwb, selection, training, appraisal, compensation, hrpractices, orgtype, orgsize, orglevels, orgcent, gender, age, racenum, english, edu, status, orgtenure, postenure, suptenure, dirreport, weekhours, salary) %>%
  psych::describe(.)

6.2 Pearson Correlations

source("corstars.R")

dat %>%
  select(orgdehum, exploitatt, wbatt, sblm, soe, jobsat, acommit, burnout, tointent, perf, ocb, cwb, selection, training, appraisal, compensation, hrpractices, orgtype, orgsize, orglevels, orgcent, gender, age, racenum, english, edu, status, orgtenure, postenure, suptenure, dirreport, weekhours, salary) %>%
  as.matrix(.) %>%
  corstars(., method = "pearson")
NA

Note: The following variables are measured on an ordinal scale:

  • Org size

  • Org levels

  • Org centrality

  • Salary

  • Age

  • Education

Use Spearman’s rho for these variables.


6.3 Spearman Correlations for Ordinal Demographic Variables

source("corstars.R")

dat %>%
  select(orgdehum, exploitatt, wbatt, sblm, soe, jobsat, acommit, burnout, tointent, perf, ocb, cwb, selection, training, appraisal, compensation, hrpractices, orgtype, orgsize, orglevels, orgcent, gender, age, racenum, english, edu, status, orgtenure, postenure, suptenure, dirreport, weekhours, salary) %>%
  as.matrix(.) %>%
  corstars(., method = "spearman")

Several interesting observations:

  • For-profit organizations significantly related to higher exploitation HR attributions, BLM, and org dehumanization.

  • Org size positively related to performance HR attributions & OCB and negatively related to BLM.

  • Org levels positivley related to exploitation & cost HR attributions and negatively related to SOE & POS. Also positively related to both OCBs and CWBs.

  • Salary negatively related to exploitation & cost HR attributions, BLM , & org dehumanization and positivley related to well-being attributions and POS.

  • Being responsible for direct reports positively related to well-being HR attributions and negatively related to org dehumanization.

  • Tenure variables and weekly hours not related to variables of interest.

  • Status, gender, and age not related to variables of interest.


7 Hypothesis Tests


7.1 Hypothesis 1

Employee HR attributions are related to employee perceptions of organizational dehumanization. Specifically, (a) employees who tend to make employee-centric attributions perceive low levels of dehumanization whereas (b) employees who tend to make organizationcentric attributions perceive high levels of dehumanization.

cor.test(dat$wbatt, dat$orgdehum, method = "pearson")

    Pearson's product-moment correlation

data:  dat$wbatt and dat$orgdehum
t = -13, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.6121 -0.4742
sample estimates:
    cor 
-0.5468 
cor.test(dat$exploitatt, dat$orgdehum, method = "pearson")

    Pearson's product-moment correlation

data:  dat$exploitatt and dat$orgdehum
t = 18, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.6101 0.7191
sample estimates:
   cor 
0.6681 

Hypothesis 1 is supported.

dat %>%
  ggplot(aes(x = wbatt, y = orgdehum)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Employee-centric HR Attributions", breaks = c(1:7)) +
  scale_y_continuous("Organizaitonal Dehumanization", breaks = c(1:7))

dat %>%
  ggplot(aes(x = exploitatt, y = orgdehum)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organization-centric HR Attributions", breaks = c(1:7)) +
  scale_y_continuous("Organizaitonal Dehumanization", breaks = c(1:7))

Since previous data exploration revealed that variables of interest are non-normally distributed, conduct two additional tests to affirm results:

  • Kendall’s tau-b

  • Visual inspection of regression diagnostic plots

cor.test(dat$wbatt, dat$orgdehum, method = "kendall")

    Kendall's rank correlation tau

data:  dat$wbatt and dat$orgdehum
z = -12, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.4042 
cor.test(dat$exploitatt, dat$orgdehum, method = "kendall")

    Kendall's rank correlation tau

data:  dat$exploitatt and dat$orgdehum
z = 15, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.5061 
plot(lm(orgdehum ~ exploitatt, data = dat))

plot(lm(orgdehum ~ wbatt, data = dat))

Kendall’s tau aligns with Pearson’s r and no significant abnormalities spotted in the diagnostic plots.

Plot 1 (Residausl vs Fitted) examines linearity.

Plot 2 (Normal Q-Q) examines normality of residuals.

Plot 3 (Scale-Location) examines heterscedasticity.

Plot 4 (Residuals vs Leverage) examines Cook’s distance.


7.2 Hypothesis 2

Supervisor bottom-line mentality is positively related to employee perceptions of organizational dehumanization.

cor.test(dat$sblm, dat$orgdehum, method = "pearson")

    Pearson's product-moment correlation

data:  dat$sblm and dat$orgdehum
t = 21, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.6689 0.7639
sample estimates:
   cor 
0.7198 

Hypothesis 2 is supported.

dat %>%
  ggplot(aes(x = sblm, y = orgdehum)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Supervisor's Bottom-line Mentality", breaks = c(1:7)) +
  scale_y_continuous("Organizaitonal Dehumanization", breaks = c(1:7))

cor.test(dat$sblm, dat$orgdehum, method = "kendall")

    Kendall's rank correlation tau

data:  dat$sblm and dat$orgdehum
z = 16, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.5519 
plot(lm(orgdehum ~ sblm, data = dat))


7.3 Hypothesis 3

Supervisor bottom-line mentality is related to HR attributions such that (a) employees with high BLM supervisors are more likely to form organization-centric attributions and (b) employees with low BLM supervisors are more likely to form employee-centric attributions.

cor.test(dat$sblm, dat$exploitatt, method = "pearson")

    Pearson's product-moment correlation

data:  dat$sblm and dat$exploitatt
t = 15, df = 399, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5432 0.6669
sample estimates:
   cor 
0.6087 
cor.test(dat$sblm, dat$wbatt, method = "pearson")

    Pearson's product-moment correlation

data:  dat$sblm and dat$wbatt
t = -8.8, df = 399, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.4812 -0.3168
sample estimates:
    cor 
-0.4022 

Hypothesis 3 is supported.

dat %>%
  ggplot(aes(x = sblm, y = exploitatt)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Supervisor's Bottom-line Mentality", breaks = c(1:7)) +
  scale_y_continuous("Organization-centric HR Attributions", breaks = c(1:7))

dat %>%
  ggplot(aes(x = sblm, y = wbatt)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Supervisor's Bottom-line Mentality", breaks = c(1:7)) +
  scale_y_continuous("Employee-centric HR Attributions", breaks = c(1:7))

cor.test(dat$sblm, dat$exploitatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$sblm and dat$exploitatt
z = 13, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.4773 
cor.test(dat$sblm, dat$wbatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$sblm and dat$wbatt
z = -8.1, p-value = 4e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.2891 
plot(lm(exploitatt ~ sblm, data = dat))

plot(lm(wbatt ~ sblm, data = dat))


7.4 Hypothesis 4

Supervisor bottom-line mentality has a positive indirect effect on employee perceptions of organizational dehumanization through HR attributions. Specifically, supervisor BLM relates to organizational dehumanization through its (a) positive effect on organizationcentric attributions and (b) negative effect on employee-centric attributions.

summary(lm(exploitatt ~ sblm, data = dat))

Call:
lm(formula = exploitatt ~ sblm, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.644 -0.826 -0.087  0.769  3.976 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.5387     0.1342    11.5   <2e-16 ***
sblm          0.5401     0.0352    15.3   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.27 on 399 degrees of freedom
Multiple R-squared:  0.371, Adjusted R-squared:  0.369 
F-statistic:  235 on 1 and 399 DF,  p-value: <2e-16
summary(mediate(orgdehum ~ sblm + (exploitatt), data = dat, n.iter = 10000, zero = TRUE), digits = 4)
Call: mediate(y = orgdehum ~ sblm + (exploitatt), data = dat, n.iter = 10000, 
    zero = TRUE)

Direct effect estimates (traditional regression)    (c') 

R = 0.7762 R2 = 0.6024   F = 301.5 on 2 and 398 DF   p-value:  1.921e-80 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)

Confirming the F-statistic can be calculate for later.

df1 <- k <-  length(c("b", "c"))
n <- 400
df2 <- n - k
r2 <- .6024
fstat <- (r2/(1-r2))*(df2/df1)

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)
summary(lm(wbatt ~ sblm, data = dat))

Call:
lm(formula = wbatt ~ sblm, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-4.362 -1.062  0.163  1.163  3.938 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.7449     0.1663   34.54   <2e-16 ***
sblm         -0.3832     0.0437   -8.78   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.58 on 399 degrees of freedom
Multiple R-squared:  0.162, Adjusted R-squared:  0.16 
F-statistic:   77 on 1 and 399 DF,  p-value: <2e-16
summary(mediate(orgdehum ~ sblm + (wbatt), data = dat, n.iter = 10000, zero = TRUE), digits = 4)
Call: mediate(y = orgdehum ~ sblm + (wbatt), data = dat, n.iter = 10000, 
    zero = TRUE)

Direct effect estimates (traditional regression)    (c') 

R = 0.7732 R2 = 0.5979   F = 295.9 on 2 and 398 DF   p-value:  1.827e-79 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)

Confirming the F-statistic can be calculate for later.

df1 <- k <-  length(c("b", "c"))
n <- 400
df2 <- n - k
r2 <- .5979
fstat <- (r2/(1-r2))*(df2/df1)

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

Since the psych::mediate function appears to only calculate percentile bootstraps and not bias-corrected bootstraps, rerun analysis in lavaan.

indirect.exploit <- '
  # direct effect
    orgdehum ~ c*sblm
  # mediator
    exploitatt ~ a*sblm
    orgdehum ~ b*exploitatt
  # indirect effect
    ab := a*b'

indirect.exploit.fit <- sem(indirect.exploit, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(indirect.exploit.fit, boot.ci.type = "perc")
parameterEstimates(indirect.exploit.fit, boot.ci.type = "bca.simple")
summary(indirect.exploit.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          7
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblm       (c)    0.410    0.040   10.284    0.000
  exploitatt ~                                        
    sblm       (a)    0.539    0.036   14.908    0.000
  orgdehum ~                                          
    exploitatt (b)    0.340    0.046    7.385    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          1.261    0.106   11.861    0.000
   .exploitatt        1.540    0.125   12.363    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.879    0.071   12.459    0.000
   .exploitatt        1.615    0.127   12.674    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ab                0.183    0.028    6.467    0.000

Calculating the F-statistic

df1 <- k <-  length(c("b", "c"))
n <- nobs(indirect.exploit.fit)
df2 <- n - k
r2 <- inspect(indirect.exploit.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)
indirect.wb <- '
  # direct effect
    orgdehum ~ c*sblm
  # mediator
    wbatt ~ a*sblm
    orgdehum ~ b*wbatt
  # indirect effect
    ab := a*b'

indirect.wb.fit <- sem(indirect.wb, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(indirect.wb.fit, boot.ci.type = "perc")
parameterEstimates(indirect.wb.fit, boot.ci.type = "bca.simple")
summary(indirect.wb.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 19 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          7
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblm       (c)    0.491    0.033   14.851    0.000
  wbatt ~                                             
    sblm       (a)   -0.384    0.049   -7.830    0.000
  orgdehum ~                                          
    wbatt      (b)   -0.265    0.036   -7.276    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          3.307    0.262   12.625    0.000
   .wbatt             5.745    0.175   32.854    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.891    0.071   12.486    0.000
   .wbatt             2.484    0.165   15.039    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ab                0.102    0.020    5.116    0.000

Calculating the F-statistic

df1 <- k <-  length(c("b", "c"))
n <- nobs(indirect.wb.fit)
df2 <- n - k
r2 <- inspect(indirect.wb.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

Hypothesis 4 is supported.

7.5 Hypothesis 5

Supervisor organizational embodiment moderates the positive relationship between supervisor bottom-line mentality and employee perceptions of organizational dehumanization. Specifically, the relationship between supervisor BLM and organizational dehumanization should be more (less) positive at high (low) levels of supervisor organizational embodiment.

summary(lm(orgdehum ~ sblmc*soec, data = dat))

Call:
lm(formula = orgdehum ~ sblmc * soec, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.221 -0.632 -0.111  0.620  3.015 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.8095     0.0489   77.89  < 2e-16 ***
sblmc         0.5440     0.0275   19.81  < 2e-16 ***
soec         -0.3489     0.0429   -8.13  5.6e-15 ***
sblmc:soec    0.0693     0.0210    3.30    0.001 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.95 on 396 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.595, Adjusted R-squared:  0.592 
F-statistic:  194 on 3 and 396 DF,  p-value: <2e-16

7.5.1 Plot Interaction (Factor Predictor)

mod1 <- lm(orgdehum ~ sblmc*soec, data = dat)
inter.sd <- effect(c("sblmc*soec"), mod1,
                     xlevels = list(sblmc = c(-sd(dat$sblmc), +sd(dat$sblmc)),
                                  soec = c(-sd(dat$soec), +sd(dat$soec))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the different variables
inter.sd$sblm <- factor(inter.sd$sblmc,
                      levels = c(-sd(dat$sblmc), +sd(dat$sblmc)),
                      labels = c("-1 SD SBLM", "+ 1 SD SBLM"))
                     
inter.sd$soe <- factor(inter.sd$soec,
              levels = c(-sd(dat$soe), +sd(dat$soec)),
              labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, shape = soe, linetype = soe)) +
      geom_point(size = 3) + geom_line(size = 1) +
      scale_linetype_manual(values = c("dashed", "solid")) +
      scale_shape_manual(values = c(17, 16)) +
      scale_x_discrete("Supervisor's Bottom-Line Mentality") +
      scale_y_continuous("Organizational Dehumanization", limits = c(1, 7), breaks = c(1:7)) +
      guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
             linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
      theme(text = element_text(size = 13))

7.5.2 Plot Interaction (Continuous Predictor)

rm(mod1)
rm(inter.sd)

mod1 <- lm(orgdehum ~ sblm*soe, data = dat)
inter.sd <- effect(c("sblm*soe"), mod1,
                   xlevels = list(sblm = c(1:7),
                                  soe = c(mean(dat$soe)-sd(dat$soe), 
                                          mean(dat$soe)+sd(dat$soe))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the moderator

inter.sd$soe <- factor(inter.sd$soe,
                       levels = c(mean(dat$soe)-sd(dat$soe), mean(dat$soe)+sd(dat$soec)),
                       labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, linetype = soe)) +
  geom_line(size = 1) +
  scale_linetype_manual(values = c("dashed", "solid")) +
  scale_x_continuous("Supervisor's Bottom-Line Mentality", limits = c(1, 7), breaks = c(1:7)) +
  scale_y_continuous("Organizational Dehumanization", limits = c(1, 7), breaks = c(1:7)) +
  guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
         linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
  theme(text = element_text(size = 13))

7.5.3 Obtaining MSE for Reporting

c(crossprod(mod1$residuals))/length(mod1$residuals)
[1] 0.8942

Hypothesis 5 is supported.

  • Notably, SOE exhibits a negative main effect on organizational dehumanization.

7.6 Hypothesis 6

Supervisor’s organizational embodiment moderates the relationship between supervisor bottom-line mentality and employee HR attributions. Specifically, high (low) supervisor BLM is more strongly related to organization-centric (employee-centric) HR attributions at high levels of supervisor’s organizational embodiment.

summary(lm(exploitatt ~ sblmc*soec, data = dat))

Call:
lm(formula = exploitatt ~ sblmc * soec, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.510 -0.796 -0.113  0.830  3.525 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.3817     0.0643   52.56  < 2e-16 ***
sblmc         0.5160     0.0361   14.28  < 2e-16 ***
soec         -0.1928     0.0565   -3.41  0.00072 ***
sblmc:soec    0.0578     0.0276    2.10  0.03680 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.25 on 397 degrees of freedom
Multiple R-squared:  0.394, Adjusted R-squared:  0.39 
F-statistic: 86.2 on 3 and 397 DF,  p-value: <2e-16

7.6.1 Organization-Centric HR Attributions

7.6.1.1 Plot Interaction (Factor Predictor)

rm(inter.sd)

mod2 <- lm(exploitatt ~ sblmc*soec, data = dat)
inter.sd <- effect(c("sblmc*soec"), mod2,
                     xlevels = list(sblmc = c(-sd(dat$sblmc), +sd(dat$sblmc)),
                                  soec = c(-sd(dat$soec), +sd(dat$soec))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the different variables
inter.sd$sblm <- factor(inter.sd$sblmc,
                      levels = c(-sd(dat$sblmc), sd(dat$sblmc)),
                      labels = c("-1 SD SBLM", "+ 1 SD SBLM"))
                     
inter.sd$soe <- factor(inter.sd$soec,
              levels = c(-sd(dat$soec), sd(dat$soec)),
              labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, shape = soe, linetype = soe)) +
      geom_point(size = 3) + geom_line(size = 1) +
      scale_linetype_manual(values = c("dashed", "solid")) +
      scale_shape_manual(values = c(17, 16)) +      
      scale_x_discrete("Supervisor's Bottom-Line Mentality") +
      scale_y_continuous("Organization-centric HR Attributions", limits = c(1, 7), breaks = c(1:7)) +
      guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
             linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
      theme(text = element_text(size = 13))

7.6.1.2 Plot Interaction (Continuous Predictor)

rm(mod2)
rm(inter.sd)

mod2 <- lm(exploitatt ~ sblm*soe, data = dat)
inter.sd <- effect(c("sblm*soe"), mod2,
                   xlevels = list(sblm = c(1:7),
                                  soe = c(mean(dat$soe)-sd(dat$soe), 
                                          mean(dat$soe)+sd(dat$soe))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the moderator

inter.sd$soe <- factor(inter.sd$soe,
                       levels = c(mean(dat$soe)-sd(dat$soe), mean(dat$soe)+sd(dat$soec)),
                       labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, linetype = soe)) +
  geom_line(size = 1) +
  scale_linetype_manual(values = c("dashed", "solid")) +
  scale_x_continuous("Supervisor's Bottom-Line Mentality", limits = c(1, 7), breaks = c(1:7)) +
  scale_y_continuous("Organization-Centric HR Attributions", limits = c(1, 7), breaks = c(1:7)) +
  guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
         linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
  theme(text = element_text(size = 13))

7.6.1.3 Obtaining MSE for Reporting

c(crossprod(mod2$residuals))/length(mod2$residuals)
[1] 1.552

7.6.2 Employee-Centric HR Attributions

summary(lm(wbatt ~ sblmc*soec, data = dat))

Call:
lm(formula = wbatt ~ sblmc * soec, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-5.229 -0.883  0.167  0.950  4.076 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  4.45692    0.07177   62.10  < 2e-16 ***
sblmc       -0.27122    0.04032   -6.73  6.1e-11 ***
soec         0.66835    0.06308   10.60  < 2e-16 ***
sblmc:soec  -0.00503    0.03080   -0.16     0.87    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.4 on 397 degrees of freedom
Multiple R-squared:  0.347, Adjusted R-squared:  0.342 
F-statistic: 70.2 on 3 and 397 DF,  p-value: <2e-16

7.6.2.1 Plot Interaction (Factor Predictor)

rm(inter.sd)

mod3 <- lm(wbatt ~ sblmc*soec, data = dat)
inter.sd <- effect(c("sblmc*soec"), mod3,
                     xlevels = list(sblmc = c(-sd(dat$sblmc), +sd(dat$sblmc)),
                                  soec = c(-sd(dat$soec), +sd(dat$soec))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the different variables
inter.sd$sblm <- factor(inter.sd$sblmc,
                      levels = c(-sd(dat$sblmc), sd(dat$sblmc)),
                      labels = c("-1 SD SBLM", "+ 1 SD SBLM"))
                     
inter.sd$soe <- factor(inter.sd$soec,
              levels = c(-sd(dat$soec), sd(dat$soec)),
              labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, shape = soe, linetype = soe)) +
      geom_point(size = 3) + geom_line(size = 1) +
      scale_linetype_manual(values = c("dashed", "solid")) +
      scale_shape_manual(values = c(17, 16)) +
      scale_x_discrete("Supervisor's Bottom-Line Mentality") +
      scale_y_continuous("Employee-centric HR Attributions", limits = c(1, 7), breaks = c(1:7)) +
      guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
             linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
      theme(text = element_text(size = 13))

7.6.2.2 Plot Interaction (Continuous Predictor)

rm(mod3)
rm(inter.sd)

mod3 <- lm(wbatt ~ sblm*soe, data = dat)
inter.sd <- effect(c("sblm*soe"), mod3,
                   xlevels = list(sblm = c(1:7),
                                  soe = c(mean(dat$soe)-sd(dat$soe), 
                                          mean(dat$soe)+sd(dat$soe))))
inter.sd <- as.data.frame(inter.sd)

# Create factors of the moderator

inter.sd$soe <- factor(inter.sd$soe,
                       levels = c(mean(dat$soe)-sd(dat$soe), mean(dat$soe)+sd(dat$soec)),
                       labels = c("-1 SD SOE", "+1 SD SOE"))

# Plot 
ggplot(data = inter.sd, aes(x = sblm, y = fit, group = soe, linetype = soe)) +
  geom_line(size = 1) +
  scale_linetype_manual(values = c("dashed", "solid")) +
  scale_x_continuous("Supervisor's Bottom-Line Mentality", limits = c(1, 7), breaks = c(1:7)) +
  scale_y_continuous("Employee-Centric HR Attributions", limits = c(1, 7), breaks = c(1:7)) +
  guides(shape = guide_legend(title = NULL, reverse = TRUE, keywidth = 5),
         linetype = guide_legend(title = NULL, reverse = TRUE, keywidth = 5)) +
  theme(text = element_text(size = 13))

7.6.2.3 Obtaining MSE for Reporting

c(crossprod(mod3$residuals))/length(mod3$residuals)
[1] 1.932

Hypothesis 6 is partially supported.

  • Supported for organization-centric attributions.

  • Not supported for employee-centric attributions.

  • Notably, SOE appears to exhibit a substantial main effect. SOE positively impacts employee-centric attributions and negatively impacts organization-centric attributions.

7.7 Hypothesis 7

Supervisor’s organizational embodiment moderates the positive indirect effect of supervisor bottom-line mentality on employee perceptions of organizational dehumanization through HR attributions. Specifically, the indirect effect of supervisor BLM on organizational dehumanization is more positive at high levels of supervisor’s organizational embodiment.

7.7.1 Using psych::mediate

summary(mediate(orgdehum ~ sblm*soe + (exploitatt), data = dat, n.iter = 10000, zero = TRUE), digits = 4)
data length [10000] is not a sub-multiple or multiple of the number of rows [3]data length [10000] is not a sub-multiple or multiple of the number of rows [3]
Call: mediate(y = orgdehum ~ sblm * soe + (exploitatt), data = dat, 
    n.iter = 10000, zero = TRUE)

Direct effect estimates (traditional regression)    (c') 

R = 0.8088 R2 = 0.6542   F = 187.3 on 4 and 396 DF   p-value:  6.357e-90 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)

summary(mediate(orgdehum ~ sblm*soe + (wbatt), data = dat, n.iter = 10000, zero = TRUE), digits = 4)
data length [10000] is not a sub-multiple or multiple of the number of rows [3]data length [10000] is not a sub-multiple or multiple of the number of rows [3]
Call: mediate(y = orgdehum ~ sblm * soe + (wbatt), data = dat, n.iter = 10000, 
    zero = TRUE)

Direct effect estimates (traditional regression)    (c') 

R = 0.7931 R2 = 0.629   F = 167.9 on 4 and 396 DF   p-value:  6.762e-84 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)

The psych::mediate function does not appear appropriate for this analysis as it includes an estimate of the interaction term on the outcome variable (c’3). This appears to be an analysis for Model 8 of Process, not Model 7.

7.7.2 Using lavaan::sem

Need to manually create interaction term for lavaan.

dat %<>%
  mutate(sblmxsoe = sblm*soe) %>% # Uncentered
  mutate(sblmcxsoec = sblmc*soec) # Centered
summary(lm(exploitatt ~ sblmc*soec, data = dat))

Call:
lm(formula = exploitatt ~ sblmc * soec, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.510 -0.796 -0.113  0.830  3.525 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.3817     0.0643   52.56  < 2e-16 ***
sblmc         0.5160     0.0361   14.28  < 2e-16 ***
soec         -0.1928     0.0565   -3.41  0.00072 ***
sblmc:soec    0.0578     0.0276    2.10  0.03680 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.25 on 397 degrees of freedom
Multiple R-squared:  0.394, Adjusted R-squared:  0.39 
F-statistic: 86.2 on 3 and 397 DF,  p-value: <2e-16
df1 <- k <-  length(c("a1", "a2", "a3"))
n <- 400
df2 <- n - k
r2 <- .394
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)
condindirect.exploit <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediator
    exploitatt ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*exploitatt
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c + (a1 + a2 + a3)*b
'
    
condindirect.exploit.fit <- sem(condindirect.exploit, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(condindirect.exploit.fit, boot.ci.type = "perc")
parameterEstimates(condindirect.exploit.fit, boot.ci.type = "bca.simple")
condindirect.exploit2 <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediator
    exploitatt ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*exploitatt
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c + (a1 + a2 + a3)*b

  # mean of centered SOE (for simple slopes)
    soec ~ soec.mean*1
  # variance of centered SOE (for simple slopes)
    soec ~~ soec.var*soec
  # indirect effects conditional on moderator (a1 + a3*a2.value)*b
    indirect.SDbelow := a1*b + a3*b*(-sqrt(soec.var))
    indirect.mean := a1*b + a3*soec.mean*b
    indirect.SDabove := a1*b + a3*b*(sqrt(soec.var))
'
 
condindirect.exploit.fit2 <- sem(condindirect.exploit2, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
lavaan WARNING: syntax contains parameters involving exogenous covariates; switching to fixed.x = FALSE
parameterEstimates(condindirect.exploit.fit2, boot.ci.type = "perc")
parameterEstimates(condindirect.exploit.fit2, boot.ci.type = "bca.simple")
summary(condindirect.exploit.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          9
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                                55.362
  Degrees of freedom                                 2
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblmc      (c)    0.410    0.040   10.255    0.000
  exploitatt ~                                        
    sblmc     (a1)    0.515    0.040   12.822    0.000
    soec      (a2)   -0.193    0.063   -3.071    0.002
    sblmcxsoc (a3)    0.057    0.028    2.083    0.037
  orgdehum ~                                          
    exploittt  (b)    0.340    0.047    7.262    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          2.635    0.165   15.976    0.000
   .exploitatt        3.379    0.068   49.985    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.879    0.071   12.399    0.000
   .exploitatt        1.554    0.115   13.519    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ab                0.020    0.010    1.903    0.057
    total             0.538    0.041   13.136    0.000
inspect(condindirect.exploit.fit, "rsquare")
  orgdehum exploitatt 
     0.602      0.394 

Calculating F

df1 <- k <-  length(c("b", "c"))
n <- nobs(condindirect.exploit.fit)
df2 <- n - k
r2 <- inspect(condindirect.exploit.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

7.7.2.1 Probing the Conditional Indirect Effect

w <- c(-sd(dat$soec), 0, +sd(dat$soec))
a1 <- coef(condindirect.exploit.fit)[["a1"]]
a3 <- coef(condindirect.exploit.fit)[["a3"]]
b <- coef(condindirect.exploit.fit)[["b"]]
condindirect.probe <- data.frame(w, a1, a3, b)

condindirect.probe %>%
  rowwise() %>%
  mutate(thetaxm = a1 + a3*w) %>%
  mutate(indirect = thetaxm*b)

Results appear to match the ones above.

a3b is the difference between the conditional indirect effects between groups of people that differ by one unit in the moderator (Hayes, 2017, p. 453)

summary(lm(wbatt ~ sblmc*soec, data = dat))

Call:
lm(formula = wbatt ~ sblmc * soec, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-5.229 -0.883  0.167  0.950  4.076 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  4.45692    0.07177   62.10  < 2e-16 ***
sblmc       -0.27122    0.04032   -6.73  6.1e-11 ***
soec         0.66835    0.06308   10.60  < 2e-16 ***
sblmc:soec  -0.00503    0.03080   -0.16     0.87    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.4 on 397 degrees of freedom
Multiple R-squared:  0.347, Adjusted R-squared:  0.342 
F-statistic: 70.2 on 3 and 397 DF,  p-value: <2e-16
condindirect.wb <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediator
    wbatt ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*wbatt
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c + (a1 + a2 + a3)*b
'
    
condindirect.wb.fit <- sem(condindirect.wb, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(condindirect.wb.fit, boot.ci.type = "perc")
parameterEstimates(condindirect.wb.fit, boot.ci.type = "bca.simple")
summary(condindirect.wb.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          9
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                                32.085
  Degrees of freedom                                 2
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblmc      (c)    0.491    0.032   15.218    0.000
  wbatt ~                                             
    sblmc     (a1)   -0.271    0.048   -5.624    0.000
    soec      (a2)    0.668    0.069    9.753    0.000
    sblmcxsoc (a3)   -0.005    0.037   -0.137    0.891
  orgdehum ~                                          
    wbatt      (b)   -0.265    0.036   -7.349    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          4.953    0.174   28.447    0.000
   .wbatt             4.456    0.074   59.947    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.891    0.071   12.497    0.000
   .wbatt             1.936    0.153   12.641    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ab                0.001    0.010    0.136    0.892
    total             0.387    0.050    7.694    0.000
inspect(condindirect.wb.fit, "rsquare")
orgdehum    wbatt 
   0.597    0.347 

Calculating F

df1 <- k <-  length(c("b", "c"))
n <- nobs(condindirect.wb.fit)
df2 <- n - k
r2 <- inspect(condindirect.wb.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

Hypothesis 7 is partially supported.

  • Supported for organization-centric attributions. Note: effect is quite small.

  • Not supported for employee-centric attributions.

7.8 Hypothesis 8

Organizational dehumanization is negatively related to job satisfaction.

cor.test(dat$orgdehum, dat$jobsat, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$jobsat
t = -18, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.7286 -0.6225
sample estimates:
    cor 
-0.6791 

Hypothesis 8 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = jobsat)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Job Satisfaction", breaks = c(1:7))

cor.test(dat$orgdehum, dat$jobsat, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$jobsat
z = -15, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.5254 
plot(lm(jobsat ~ orgdehum, data = dat))

Diagnostic plots generally looks fine, although the scale-location plot indicates slight heteroscedasticity.

7.9 Hypothesis 9

Organizational dehumanization is negatively related to affective commitment.

cor.test(dat$orgdehum, dat$acommit, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$acommit
t = -18, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.7257 -0.6187
sample estimates:
    cor 
-0.6758 

Hypothesis 9 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = acommit)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Affective Commitment", breaks = c(1:7))

cor.test(dat$orgdehum, dat$acommit, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$acommit
z = -15, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.5002 
plot(lm(acommit ~ orgdehum, data = dat))

7.10 Hypothesis 10

Organizational dehumanization is positively related to turnover intentions.

cor.test(dat$orgdehum, dat$tointent, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$tointent
t = 17, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5943 0.7070
sample estimates:
   cor 
0.6543 

Hypothesis 10 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = tointent)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Turnover Intentions", breaks = c(1:7))

cor.test(dat$orgdehum, dat$tointent, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$tointent
z = 14, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.4823 
plot(lm(tointent ~ orgdehum, data = dat))

7.11 Hypothesis 11

Organizational dehumanization is positively related to burnout.

cor.test(dat$orgdehum, dat$burnout, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$burnout
t = 18, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.6031 0.7137
sample estimates:
  cor 
0.662 

Hypothesis 11 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = burnout)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Burnout", breaks = c(1:7))

cor.test(dat$orgdehum, dat$burnout, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$burnout
z = 14, p-value <2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.4785 
plot(lm(burnout ~ orgdehum, data = dat))

7.11.1 Burnout Dimensions

cor.test(dat$orgdehum, dat$diseng, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$diseng
t = 17, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5813 0.6968
sample estimates:
   cor 
0.6427 
cor.test(dat$orgdehum, dat$exhaust, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$exhaust
t = 15, df = 398, p-value <2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5399 0.6645
sample estimates:
   cor 
0.6059 

7.12 Hypothesis 12

Organizational dehumanization is negatively related to task performance.

cor.test(dat$orgdehum, dat$perf, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$perf
t = -2.3, df = 398, p-value = 0.02
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.21172 -0.01824
sample estimates:
    cor 
-0.1161 

Hypothesis 12 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = perf)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Task Performance", breaks = c(1:7))

However, the scatterplot indicates the variables do not have a bivariate normal distribution.

cor.test(dat$orgdehum, dat$perf, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$perf
z = -3.5, p-value = 5e-04
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.1238 
plot(lm(perf ~ orgdehum, data = dat))

Q-Q plot indicates non-normality of residuals.

7.13 Hypothesis 13

Organizational dehumanization is negatively related to organizational citizenship behaviors.

cor.test(dat$orgdehum, dat$ocb, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$ocb
t = -1.8, df = 397, p-value = 0.08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.18443  0.01042
sample estimates:
     cor 
-0.08785 

Hypothesis 13 is not supported.

dat %>%
  ggplot(aes(x = orgdehum, y = ocb)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Organizaitonal Citizenship Behaviors", breaks = c(1:7))

cor.test(dat$orgdehum, dat$ocb, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$ocb
z = -1.6, p-value = 0.1
alternative hypothesis: true tau is not equal to 0
sample estimates:
     tau 
-0.05507 
plot(lm(ocb ~ orgdehum, data = dat))

7.14 Hypothesis 14

Organizational dehumanization is positively related to counterproductive work behaviors.

cor.test(dat$orgdehum, dat$cwb, method = "pearson")

    Pearson's product-moment correlation

data:  dat$orgdehum and dat$cwb
t = 7.3, df = 398, p-value = 2e-12
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2539 0.4271
sample estimates:
   cor 
0.3434 

Hypothesis 14 is supported.

dat %>%
  ggplot(aes(x = orgdehum, y = cwb)) + geom_point() + geom_smooth(method = "lm") +
  scale_x_continuous("Organizational Dehumanization", breaks = c(1:7)) +
  scale_y_continuous("Counterproductive Work Behaviors", breaks = c(1:7))

cor.test(dat$orgdehum, dat$cwb, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orgdehum and dat$cwb
z = 7.8, p-value = 8e-15
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.2743 
plot(lm(cwb ~ orgdehum, data = dat))


8 Regressions with Controls

  • Bolster correlation results with regression analyses including control variables
  • Include demographic variables that were significantly correlate with focal variables:
    • orgtype
    • orglevels
    • edu
    • dirreport
    • salary

8.1 Hypothesis 1

mod1 <- lm(orgdehum ~ wbatt + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod1)

Call:
lm(formula = orgdehum ~ wbatt + orgtype + orglevels + edu + dirreport + 
    salary + hrpractices, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.631 -0.732 -0.045  0.763  4.639 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.6907     0.3126   18.20  < 2e-16 ***
wbatt        -0.4055     0.0419   -9.67  < 2e-16 ***
orgtype       0.5730     0.1563    3.67  0.00028 ***
orglevels     0.1914     0.0444    4.31    2e-05 ***
edu          -0.0154     0.0654   -0.23  0.81444    
dirreport     0.0199     0.1273    0.16  0.87581    
salary       -0.1223     0.0351   -3.48  0.00056 ***
hrpractices  -0.0529     0.0280   -1.89  0.05929 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.19 on 392 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.368, Adjusted R-squared:  0.357 
F-statistic: 32.6 on 7 and 392 DF,  p-value: <2e-16
mod2 <- lm(orgdehum ~ exploitatt + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod2)

Call:
lm(formula = orgdehum ~ exploitatt + orgtype + orglevels + edu + 
    dirreport + salary + hrpractices, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.236 -0.632 -0.101  0.601  4.364 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.0103     0.2921   10.31  < 2e-16 ***
exploitatt    0.5429     0.0343   15.84  < 2e-16 ***
orgtype       0.3485     0.1373    2.54  0.01149 *  
orglevels     0.1306     0.0389    3.35  0.00088 ***
edu          -0.0760     0.0566   -1.34  0.18036    
dirreport    -0.0723     0.1107   -0.65  0.51397    
salary       -0.0621     0.0308   -2.02  0.04439 *  
hrpractices  -0.1317     0.0208   -6.33  6.8e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.04 on 392 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.523, Adjusted R-squared:  0.514 
F-statistic: 61.4 on 7 and 392 DF,  p-value: <2e-16

8.2 Hypothesis 2

mod3 <- lm(orgdehum ~ sblm + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod3)

Call:
lm(formula = orgdehum ~ sblm + orgtype + orglevels + edu + dirreport + 
    salary + hrpractices, data = dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7654 -0.6868 -0.0824  0.5547  3.0360 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   2.1838     0.2912    7.50  4.3e-13 ***
sblm          0.5398     0.0294   18.36  < 2e-16 ***
orgtype       0.2842     0.1292    2.20    0.028 *  
orglevels     0.2115     0.0358    5.92  7.2e-09 ***
edu           0.0363     0.0535    0.68    0.498    
dirreport    -0.1504     0.1042   -1.44    0.150    
salary       -0.0534     0.0289   -1.85    0.065 .  
hrpractices  -0.0945     0.0200   -4.73  3.1e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.974 on 392 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.579, Adjusted R-squared:  0.572 
F-statistic: 77.2 on 7 and 392 DF,  p-value: <2e-16

8.3 Hypothesis 3

mod4 <- lm(exploitatt ~ sblm + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod4)

Call:
lm(formula = exploitatt ~ sblm + orgtype + orglevels + edu + 
    dirreport + salary + hrpractices, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.606 -0.820 -0.084  0.830  4.015 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.9000     0.3729    2.41    0.016 *  
sblm          0.5274     0.0376   14.01  < 2e-16 ***
orgtype       0.2708     0.1654    1.64    0.102    
orglevels     0.2000     0.0458    4.37  1.6e-05 ***
edu           0.1214     0.0685    1.77    0.077 .  
dirreport    -0.0175     0.1334   -0.13    0.896    
salary       -0.0474     0.0370   -1.28    0.201    
hrpractices  -0.0229     0.0256   -0.89    0.372    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.25 on 393 degrees of freedom
Multiple R-squared:  0.405, Adjusted R-squared:  0.394 
F-statistic: 38.2 on 7 and 393 DF,  p-value: <2e-16
mod5 <- lm(wbatt ~ sblm + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod5)

Call:
lm(formula = wbatt ~ sblm + orgtype + orglevels + edu + dirreport + 
    salary + hrpractices, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-4.698 -0.872  0.113  0.982  3.829 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.0483     0.4102    7.43  6.8e-13 ***
sblm         -0.2519     0.0414   -6.08  2.8e-09 ***
orgtype      -0.1827     0.1820   -1.00   0.3159    
orglevels    -0.1651     0.0504   -3.28   0.0011 ** 
edu           0.0698     0.0753    0.93   0.3545    
dirreport     0.1214     0.1467    0.83   0.4086    
salary       -0.0246     0.0407   -0.60   0.5463    
hrpractices   0.3147     0.0281   11.19  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.37 on 393 degrees of freedom
Multiple R-squared:  0.376, Adjusted R-squared:  0.364 
F-statistic: 33.8 on 7 and 393 DF,  p-value: <2e-16

8.4 All Predictors

mod6 <- lm(orgdehum ~ sblm + exploitatt + wbatt + orgtype + orglevels + edu + dirreport + salary + hrpractices, data = dat)
summary(mod6)

Call:
lm(formula = orgdehum ~ sblm + exploitatt + wbatt + orgtype + 
    orglevels + edu + dirreport + salary + hrpractices, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-2.788 -0.538 -0.084  0.508  3.233 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   2.5641     0.2772    9.25  < 2e-16 ***
sblm          0.3473     0.0320   10.84  < 2e-16 ***
exploitatt    0.2679     0.0350    7.64  1.6e-13 ***
wbatt        -0.2042     0.0318   -6.41  4.2e-10 ***
orgtype       0.1747     0.1140    1.53  0.12621    
orglevels     0.1244     0.0324    3.83  0.00015 ***
edu           0.0180     0.0473    0.38  0.70330    
dirreport    -0.1216     0.0916   -1.33  0.18523    
salary       -0.0459     0.0255   -1.80  0.07281 .  
hrpractices  -0.0240     0.0202   -1.19  0.23423    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.856 on 390 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.677, Adjusted R-squared:  0.669 
F-statistic: 90.8 on 9 and 390 DF,  p-value: <2e-16

Regression analyses indicate that predictors of interest predict organzational dehumanization even after controlling for covariates and each other.


9 Supplemental Analyses: CFA of Core Constructs

9.1 Single Factor

cfa.model <- '
  # measurement model
    factor =~ sblm_1 + sblm_2 + sblm_3 + sblm_4 + exploit_1 + exploit_2 + exploit_3 + wbatt_1 + wbatt_2 + wbatt_3 + orgdehum_1 + orgdehum_2 + orgdehum_3 + orgdehum_4 + orgdehum_5 + orgdehum_6 + orgdehum_7 + orgdehum_8 + orgdehum_9 + orgdehum_10 + orgdehum_11
'
cfa.fit <- cfa(cfa.model, data = dat)
summary(cfa.fit, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6-7 ended normally after 33 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         42
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                              3240.092
  Degrees of freedom                               189
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              9111.436
  Degrees of freedom                               210
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.657
  Tucker-Lewis Index (TLI)                       0.619

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14172.069
  Loglikelihood unrestricted model (H1)     -12552.023
                                                      
  Akaike (AIC)                               28428.137
  Bayesian (BIC)                             28595.779
  Sample-size adjusted Bayesian (BIC)        28462.510

Root Mean Square Error of Approximation:

  RMSEA                                          0.201
  90 Percent confidence interval - lower         0.195
  90 Percent confidence interval - upper         0.207
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.096

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  factor =~                                                             
    sblm_1            1.000                               1.412    0.742
    sblm_2            1.011    0.063   16.062    0.000    1.427    0.770
    sblm_3            1.043    0.067   15.573    0.000    1.472    0.749
    sblm_4            1.064    0.066   16.213    0.000    1.502    0.776
    exploit_1         0.947    0.067   14.167    0.000    1.337    0.687
    exploit_2         0.688    0.056   12.391    0.000    0.971    0.607
    exploit_3         0.823    0.062   13.350    0.000    1.162    0.651
    wbatt_1          -0.677    0.064  -10.660    0.000   -0.956   -0.527
    wbatt_2          -0.761    0.064  -11.945    0.000   -1.075   -0.587
    wbatt_3          -0.758    0.063  -12.087    0.000   -1.070   -0.593
    orgdehum_1        0.057    0.061    0.936    0.349    0.081    0.047
    orgdehum_2        1.107    0.066   16.831    0.000    1.563    0.803
    orgdehum_3        1.070    0.066   16.107    0.000    1.510    0.772
    orgdehum_4        1.129    0.063   17.909    0.000    1.594    0.847
    orgdehum_5        0.871    0.058   14.971    0.000    1.229    0.723
    orgdehum_6        1.078    0.062   17.395    0.000    1.522    0.826
    orgdehum_7        1.205    0.064   18.751    0.000    1.701    0.882
    orgdehum_8        1.097    0.062   17.800    0.000    1.548    0.843
    orgdehum_9        1.132    0.063   18.086    0.000    1.598    0.855
    orgdehum_10       1.218    0.066   18.376    0.000    1.720    0.867
    orgdehum_11       1.180    0.064   18.345    0.000    1.666    0.865

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .sblm_1            1.622    0.119   13.613    0.000    1.622    0.449
   .sblm_2            1.398    0.103   13.515    0.000    1.398    0.407
   .sblm_3            1.695    0.125   13.592    0.000    1.695    0.439
   .sblm_4            1.486    0.110   13.488    0.000    1.486    0.397
   .exploit_1         1.994    0.145   13.757    0.000    1.994    0.527
   .exploit_2         1.612    0.116   13.891    0.000    1.612    0.631
   .exploit_3         1.837    0.133   13.826    0.000    1.837    0.576
   .wbatt_1           2.373    0.170   13.977    0.000    2.373    0.722
   .wbatt_2           2.199    0.158   13.916    0.000    2.199    0.656
   .wbatt_3           2.105    0.151   13.908    0.000    2.105    0.648
   .orgdehum_1        2.893    0.205   14.141    0.000    2.893    0.998
   .orgdehum_2        1.349    0.101   13.362    0.000    1.349    0.356
   .orgdehum_3        1.547    0.115   13.507    0.000    1.547    0.404
   .orgdehum_4        0.997    0.076   13.043    0.000    0.997    0.282
   .orgdehum_5        1.381    0.101   13.671    0.000    1.381    0.478
   .orgdehum_6        1.077    0.081   13.215    0.000    1.077    0.317
   .orgdehum_7        0.827    0.065   12.633    0.000    0.827    0.222
   .orgdehum_8        0.976    0.075   13.084    0.000    0.976    0.289
   .orgdehum_9        0.941    0.073   12.972    0.000    0.941    0.269
   .orgdehum_10       0.980    0.076   12.841    0.000    0.980    0.249
   .orgdehum_11       0.931    0.072   12.856    0.000    0.931    0.251
    factor            1.993    0.231    8.638    0.000    1.000    1.000
  • Poor fit
library(semPlot)
semPaths(cfa.fit, what = "paths", whatLabels = "std")

9.2 Two Factor

cfa.model <- '
  # measurement model
    factor1 =~ sblm_1 + sblm_2 + sblm_3 + sblm_4 + exploit_1 + exploit_2 + exploit_3 + orgdehum_1 + orgdehum_2 + orgdehum_3 + orgdehum_4 + orgdehum_5 + orgdehum_6 + orgdehum_7 + orgdehum_8 + orgdehum_9 + orgdehum_10 + orgdehum_11
    factor2 =~ wbatt_1 + wbatt_2 + wbatt_3
'
cfa.fit <- cfa(cfa.model, data = dat, estimator = "MLR")
summary(cfa.fit, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6-7 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         43
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                               Standard      Robust
  Test Statistic                               2355.025    1630.220
  Degrees of freedom                                188         188
  P-value (Chi-square)                            0.000       0.000
  Scaling correction factor                                   1.445
       Yuan-Bentler correction (Mplus variant)                     

Model Test Baseline Model:

  Test statistic                              9111.436    5944.739
  Degrees of freedom                               210         210
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.533

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.757       0.749
  Tucker-Lewis Index (TLI)                       0.728       0.719
                                                                  
  Robust Comparative Fit Index (CFI)                         0.763
  Robust Tucker-Lewis Index (TLI)                            0.735

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13729.535  -13729.535
  Scaling correction factor                                  1.434
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)     -12552.023  -12552.023
  Scaling correction factor                                  1.443
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               27545.071   27545.071
  Bayesian (BIC)                             27716.704   27716.704
  Sample-size adjusted Bayesian (BIC)        27580.262   27580.262

Root Mean Square Error of Approximation:

  RMSEA                                          0.170       0.138
  90 Percent confidence interval - lower         0.164       0.133
  90 Percent confidence interval - upper         0.176       0.144
  P-value RMSEA <= 0.05                          0.000       0.000
                                                                  
  Robust RMSEA                                               0.166
  90 Percent confidence interval - lower                     0.159
  90 Percent confidence interval - upper                     0.174

Standardized Root Mean Square Residual:

  SRMR                                           0.073       0.073

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  factor1 =~                                                            
    sblm_1            1.000                               1.423    0.748
    sblm_2            1.009    0.030   33.646    0.000    1.436    0.775
    sblm_3            1.044    0.035   29.905    0.000    1.485    0.756
    sblm_4            1.064    0.034   31.238    0.000    1.513    0.782
    exploit_1         0.941    0.062   15.085    0.000    1.339    0.689
    exploit_2         0.689    0.058   11.813    0.000    0.981    0.614
    exploit_3         0.823    0.063   13.154    0.000    1.170    0.655
    orgdehum_1        0.066    0.074    0.904    0.366    0.095    0.056
    orgdehum_2        1.103    0.063   17.501    0.000    1.569    0.806
    orgdehum_3        1.064    0.068   15.642    0.000    1.514    0.774
    orgdehum_4        1.120    0.064   17.537    0.000    1.594    0.847
    orgdehum_5        0.865    0.064   13.497    0.000    1.231    0.724
    orgdehum_6        1.072    0.063   16.924    0.000    1.525    0.828
    orgdehum_7        1.192    0.068   17.522    0.000    1.696    0.879
    orgdehum_8        1.088    0.068   15.966    0.000    1.547    0.842
    orgdehum_9        1.121    0.069   16.236    0.000    1.595    0.853
    orgdehum_10       1.205    0.076   15.914    0.000    1.714    0.864
    orgdehum_11       1.168    0.072   16.332    0.000    1.662    0.863
  factor2 =~                                                            
    wbatt_1           1.000                               1.578    0.871
    wbatt_2           1.112    0.037   30.062    0.000    1.755    0.958
    wbatt_3           1.068    0.035   30.171    0.000    1.686    0.935

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  factor1 ~~                                                            
    factor2          -1.318    0.144   -9.148    0.000   -0.587   -0.587

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .sblm_1            1.591    0.158   10.091    0.000    1.591    0.440
   .sblm_2            1.372    0.151    9.100    0.000    1.372    0.400
   .sblm_3            1.657    0.202    8.212    0.000    1.657    0.429
   .sblm_4            1.452    0.177    8.186    0.000    1.452    0.388
   .exploit_1         1.988    0.176   11.320    0.000    1.988    0.526
   .exploit_2         1.593    0.138   11.527    0.000    1.593    0.623
   .exploit_3         1.818    0.138   13.160    0.000    1.818    0.570
   .orgdehum_1        2.891    0.147   19.620    0.000    2.891    0.997
   .orgdehum_2        1.331    0.115   11.552    0.000    1.331    0.351
   .orgdehum_3        1.535    0.154    9.987    0.000    1.535    0.401
   .orgdehum_4        0.997    0.095   10.519    0.000    0.997    0.282
   .orgdehum_5        1.375    0.138    9.938    0.000    1.375    0.476
   .orgdehum_6        1.069    0.126    8.477    0.000    1.069    0.315
   .orgdehum_7        0.845    0.105    8.010    0.000    0.845    0.227
   .orgdehum_8        0.980    0.108    9.099    0.000    0.980    0.290
   .orgdehum_9        0.949    0.109    8.739    0.000    0.949    0.272
   .orgdehum_10       0.999    0.136    7.367    0.000    0.999    0.254
   .orgdehum_11       0.946    0.124    7.633    0.000    0.946    0.255
   .wbatt_1           0.795    0.148    5.384    0.000    0.795    0.242
   .wbatt_2           0.275    0.093    2.948    0.003    0.275    0.082
   .wbatt_3           0.407    0.085    4.799    0.000    0.407    0.125
    factor1           2.024    0.218    9.274    0.000    1.000    1.000
    factor2           2.491    0.202   12.348    0.000    1.000    1.000
  • Poor fit
semPaths(cfa.fit, what = "paths", whatLabels = "std")

9.3 First Order Factors

cfa.model <- '
  # measurement model
    blm =~ sblm_1 + sblm_2 + sblm_3 + sblm_4
    exploit =~ exploit_1 + exploit_2 + exploit_3
    wb =~ wbatt_1 + wbatt_2 + wbatt_3
    odh =~ orgdehum_1 + orgdehum_2 + orgdehum_3 + orgdehum_4 + orgdehum_5 + orgdehum_6 + orgdehum_7 + orgdehum_8 + orgdehum_9 + orgdehum_10 + orgdehum_11
'
cfa.fit <- cfa(cfa.model, data = dat, estimator = "MLR")
summary(cfa.fit, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6-7 ended normally after 175 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         48
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                               Standard      Robust
  Test Statistic                               1059.601     765.911
  Degrees of freedom                                183         183
  P-value (Chi-square)                            0.000       0.000
  Scaling correction factor                                   1.383
       Yuan-Bentler correction (Mplus variant)                     

Model Test Baseline Model:

  Test statistic                              9111.436    5944.739
  Degrees of freedom                               210         210
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.533

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.902       0.898
  Tucker-Lewis Index (TLI)                       0.887       0.883
                                                                  
  Robust Comparative Fit Index (CFI)                         0.908
  Robust Tucker-Lewis Index (TLI)                            0.895

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13081.823  -13081.823
  Scaling correction factor                                  1.668
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)     -12552.023  -12552.023
  Scaling correction factor                                  1.443
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               26259.646   26259.646
  Bayesian (BIC)                             26451.237   26451.237
  Sample-size adjusted Bayesian (BIC)        26298.929   26298.929

Root Mean Square Error of Approximation:

  RMSEA                                          0.109       0.089
  90 Percent confidence interval - lower         0.103       0.084
  90 Percent confidence interval - upper         0.116       0.095
  P-value RMSEA <= 0.05                          0.000       0.000
                                                                  
  Robust RMSEA                                               0.105
  90 Percent confidence interval - lower                     0.097
  90 Percent confidence interval - upper                     0.113

Standardized Root Mean Square Residual:

  SRMR                                           0.041       0.041

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  blm =~                                                                
    sblm_1            1.000                               1.712    0.901
    sblm_2            1.010    0.027   37.383    0.000    1.729    0.933
    sblm_3            1.056    0.029   36.754    0.000    1.808    0.920
    sblm_4            1.064    0.029   36.095    0.000    1.821    0.941
  exploit =~                                                            
    exploit_1         1.000                               1.679    0.863
    exploit_2         0.762    0.046   16.414    0.000    1.279    0.800
    exploit_3         0.933    0.044   21.059    0.000    1.567    0.878
  wb =~                                                                 
    wbatt_1           1.000                               1.579    0.871
    wbatt_2           1.112    0.037   30.206    0.000    1.755    0.958
    wbatt_3           1.068    0.035   30.234    0.000    1.686    0.935
  odh =~                                                                
    orgdehum_1        1.000                               0.081    0.047
    orgdehum_2       19.526   25.303    0.772    0.440    1.573    0.808
    orgdehum_3       19.090   24.784    0.770    0.441    1.538    0.786
    orgdehum_4       19.931   25.838    0.771    0.440    1.605    0.854
    orgdehum_5       15.292   19.744    0.775    0.439    1.232    0.724
    orgdehum_6       18.999   24.604    0.772    0.440    1.530    0.831
    orgdehum_7       21.345   27.655    0.772    0.440    1.719    0.891
    orgdehum_8       19.365   25.127    0.771    0.441    1.560    0.849
    orgdehum_9       20.203   26.107    0.774    0.439    1.627    0.871
    orgdehum_10      21.852   28.246    0.774    0.439    1.760    0.887
    orgdehum_11      21.045   27.196    0.774    0.439    1.695    0.880

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  blm ~~                                                                
    exploit           1.887    0.174   10.839    0.000    0.657    0.657
    wb               -1.155    0.163   -7.102    0.000   -0.427   -0.427
    odh               0.103    0.134    0.770    0.441    0.749    0.749
  exploit ~~                                                            
    wb               -1.049    0.173   -6.077    0.000   -0.396   -0.396
    odh               0.098    0.127    0.770    0.441    0.723    0.723
  wb ~~                                                                 
    odh              -0.077    0.099   -0.778    0.436   -0.605   -0.605

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .sblm_1            0.683    0.102    6.723    0.000    0.683    0.189
   .sblm_2            0.443    0.069    6.407    0.000    0.443    0.129
   .sblm_3            0.593    0.134    4.437    0.000    0.593    0.154
   .sblm_4            0.425    0.088    4.805    0.000    0.425    0.114
   .exploit_1         0.963    0.163    5.911    0.000    0.963    0.255
   .exploit_2         0.919    0.124    7.400    0.000    0.919    0.360
   .exploit_3         0.732    0.121    6.053    0.000    0.732    0.230
   .wbatt_1           0.794    0.147    5.390    0.000    0.794    0.242
   .wbatt_2           0.274    0.092    2.969    0.003    0.274    0.082
   .wbatt_3           0.407    0.084    4.824    0.000    0.407    0.125
   .orgdehum_1        2.894    0.147   19.691    0.000    2.894    0.998
   .orgdehum_2        1.318    0.121   10.886    0.000    1.318    0.348
   .orgdehum_3        1.463    0.150    9.751    0.000    1.463    0.382
   .orgdehum_4        0.959    0.102    9.360    0.000    0.959    0.271
   .orgdehum_5        1.374    0.145    9.500    0.000    1.374    0.475
   .orgdehum_6        1.051    0.137    7.655    0.000    1.051    0.310
   .orgdehum_7        0.764    0.116    6.592    0.000    0.764    0.205
   .orgdehum_8        0.941    0.126    7.463    0.000    0.941    0.279
   .orgdehum_9        0.846    0.119    7.132    0.000    0.846    0.242
   .orgdehum_10       0.840    0.142    5.904    0.000    0.840    0.213
   .orgdehum_11       0.834    0.139    6.009    0.000    0.834    0.225
    blm               2.932    0.197   14.915    0.000    1.000    1.000
    exploit           2.818    0.220   12.785    0.000    1.000    1.000
    wb                2.492    0.202   12.363    0.000    1.000    1.000
    odh               0.006    0.017    0.386    0.700    1.000    1.000
semPaths(cfa.fit, what = "paths", whatLabels = "std")

  • Better Fit

10 Supplementa Analyses: Probling the Conditional Indirect Effect

library(lavaan)

# Need to manually create interaction term
dat %<>%
  mutate(sblmxsoe = sblm*soe) %>% # Uncentered
  mutate(sblmcxsoec = sblmc*soec) # Centered

10.1 Conditional Indirect Effect Through Exploit

10.2 Conditional Indirect Effect Through WB

condindirect.wb <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediator
    wbattc ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*wbattc
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c + (a1 + a2 + a3)*b
  # mean of centered SOE (for simple slopes)
    soec ~ soec.mean*1
  # variance of centered SOE (for simple slopes)
    soec ~~ soec.var*soec
  # indirect effects conditional on moderator (a1 + a3*a2.value)*b
    indirect.SDbelow := a1*b + a3*b*-sqrt(soec.var)
    indirect.mean := a1*b + a3*soec.mean*b
    indirect.SDabove := a1*b + a3*b*sqrt(soec.var)
'
    
condindirect.wb.fit <- sem(condindirect.wb, data = dat, se = "boot", bootstrap = 10000)
lavaan WARNING: syntax contains parameters involving exogenous covariates; switching to fixed.x = FALSE
parameterEstimates(condindirect.wb.fit, boot.ci.type = "bca.simple")

11 Supplemental Analyses: SOE Moderating Direct Path

condindirect.exploit2 <- '
  # direct effect
    orgdehum ~ c1*sblmc + c2*soec + c3*sblmcxsoec
  # mediator
    exploitatt ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*exploitatt
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c1 + c2 + c3 + (a1 + a2 + a3)*b
  # mean of centered SOE (for simple slopes)
    soec ~ soec.mean*1
  # variance of centered SOE (for simple slopes)
    soec ~~ soec.var*soec
  # indirect effects conditional on moderator (a1 + a3*a2.value)*b
    indirect.SDbelow := a1*b + a3*b*-sqrt(soec.var)
    indirect.mean := a1*b + a3*soec.mean*b
    indirect.SDabove := a1*b + a3*b*sqrt(soec.var)
'
    
condindirect.exploit.fit2 <- sem(condindirect.exploit2, data = dat, se = "boot", bootstrap = 10000)
lavaan WARNING: syntax contains parameters involving exogenous covariates; switching to fixed.x = FALSE
parameterEstimates(condindirect.exploit.fit2, boot.ci.type = "bca.simple")

The bootstrapped confidence intervals for the index of moderated mediation (a3*b) does not contain 0. Also, the direct moderation effect (c3) appears to be significant as well.

condindirect.wb2 <- '
  # direct effect
    orgdehum ~ c1*sblmc + c2*soec + c3*sblmcxsoec
  # mediator
    wbatt ~ a1*sblmc + a2*soec + a3*sblmcxsoec
    orgdehum ~ b*wbatt
  # indirect effect (index of moderated mediation)
    ab := a3*b
  # total effect
    total := c1 + c2 + c3 + (a1 + a2 + a3)*b
  # mean of centered SOE (for simple slopes)
    soec ~ soec.mean*1
  # variance of centered SOE (for simple slopes)
    soec ~~ soec.var*soec
  # indirect effects conditional on moderator (a1 + a3*a2.value)*b
    indirect.SDbelow := a1*b + a3*b*-sqrt(soec.var)
    indirect.mean := a1*b + a3*soec.mean*b
    indirect.SDabove := a1*b + a3*b*sqrt(soec.var)
'
    
condindirect.wb.fit2 <- sem(condindirect.wb2, data = dat, se = "boot", bootstrap = 10000)
lavaan WARNING: syntax contains parameters involving exogenous covariates; switching to fixed.x = FALSE
parameterEstimates(condindirect.wb.fit2, boot.ci.type = "bca.simple")

12 Supplemental Analyses: Parallel Mediation

indirect.parallel <- '
  # direct effect
    orgdehum ~ c*sblm
  # mediators
    exploitatt ~ a1*sblm
    wbatt ~ a2*sblm
    orgdehum ~ b1*exploitatt + b2*wbatt
  # indirect effects
    a1b1 := a1*b1
    a2b2 := a2*b2
    total := a1b1 + a2b2
'

indirect.parallel.fit <- sem(indirect.parallel, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(indirect.parallel.fit, boot.ci.type = "perc")
parameterEstimates(indirect.parallel.fit, boot.ci.type = "bca.simple")
summary(indirect.parallel.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 23 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         11
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                                10.060
  Degrees of freedom                                 1
  P-value (Chi-square)                           0.002

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblm       (c)    0.346    0.041    8.373    0.000
  exploitatt ~                                        
    sblm      (a1)    0.539    0.036   15.022    0.000
  wbatt ~                                             
    sblm      (a2)   -0.384    0.049   -7.856    0.000
  orgdehum ~                                          
    exploittt (b1)    0.295    0.046    6.396    0.000
    wbatt     (b2)   -0.228    0.032   -7.028    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          2.637    0.241   10.949    0.000
   .exploitatt        1.540    0.123   12.503    0.000
   .wbatt             5.745    0.173   33.125    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.754    0.062   12.229    0.000
   .exploitatt        1.615    0.126   12.772    0.000
   .wbatt             2.484    0.164   15.154    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    a1b1              0.159    0.028    5.700    0.000
    a2b2              0.087    0.017    5.157    0.000
    total             0.246    0.032    7.708    0.000
inspect(indirect.parallel.fit, "rsquare")
  orgdehum exploitatt      wbatt 
     0.652      0.370      0.162 

Calculating F

df1 <- k <-  length(c("b1", "b2", "c"))
n <- nobs(indirect.parallel.fit)
df2 <- n - k
r2 <- inspect(indirect.parallel.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

13 Supplemental Analyses: Conditional Parallel Mediation (a1 moderated)

dat %<>%
  mutate(sblmxsoe = sblm*soe) %>% # Uncentered
  mutate(sblmcxsoec = sblmc*soec) # Centered
cond.parallel <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediators
    exploitatt ~ a1*sblmc + a3*soec + a4*sblmcxsoec
    wbatt ~ a2*sblmc
    orgdehum ~ b1*exploitatt + b2*wbatt
  # indirect effects
    a1b1 := a1*b1
    a2b2 := a2*b2
  # index of moderated mediation
    a4b1 := a4*b1
  # total indirect effect
    total := a1b1 + a2b2
'

cond.parallel.fit <- sem(cond.parallel, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(cond.parallel.fit, boot.ci.type = "perc")
parameterEstimates(cond.parallel.fit, boot.ci.type = "bca.simple")
summary(cond.parallel.fit, standardized = FALSE)
lavaan 0.6-7 ended normally after 24 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         13
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                               127.079
  Degrees of freedom                                 5
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblmc      (c)    0.346    0.041    8.480    0.000
  exploitatt ~                                        
    sblmc     (a1)    0.515    0.041   12.702    0.000
    soec      (a3)   -0.193    0.063   -3.091    0.002
    sblmcxsoc (a4)    0.057    0.027    2.112    0.035
  wbatt ~                                             
    sblmc     (a2)   -0.384    0.049   -7.800    0.000
  orgdehum ~                                          
    exploittt (b1)    0.295    0.045    6.537    0.000
    wbatt     (b2)   -0.228    0.033   -6.977    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          3.798    0.226   16.781    0.000
   .exploitatt        3.379    0.067   50.224    0.000
   .wbatt             4.459    0.078   56.892    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.754    0.062   12.249    0.000
   .exploitatt        1.554    0.114   13.620    0.000
   .wbatt             2.484    0.163   15.199    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    a1b1              0.152    0.026    5.746    0.000
    a2b2              0.087    0.017    5.026    0.000
    a4b1              0.017    0.009    1.937    0.053
    total             0.239    0.030    7.857    0.000
inspect(cond.parallel.fit, "rsquare")
  orgdehum exploitatt      wbatt 
     0.652      0.394      0.162 

Calculating F

df1 <- k <- length(c("b1", "b2", "c"))
n <- nobs(cond.parallel.fit)
df2 <- n - k
r2 <- inspect(cond.parallel.fit, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

13.1 Simple Models for Coefficients

summary(lm(exploitatt ~ sblm, data = dat))

Call:
lm(formula = exploitatt ~ sblm, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-3.644 -0.826 -0.087  0.769  3.976 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.5387     0.1342    11.5   <2e-16 ***
sblm          0.5401     0.0352    15.3   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.27 on 399 degrees of freedom
Multiple R-squared:  0.371, Adjusted R-squared:  0.369 
F-statistic:  235 on 1 and 399 DF,  p-value: <2e-16
summary(lm(wbatt ~ sblm, data = dat))

Call:
lm(formula = wbatt ~ sblm, data = dat)

Residuals:
   Min     1Q Median     3Q    Max 
-4.362 -1.062  0.163  1.163  3.938 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.7449     0.1663   34.54   <2e-16 ***
sblm         -0.3832     0.0437   -8.78   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.58 on 399 degrees of freedom
Multiple R-squared:  0.162, Adjusted R-squared:  0.16 
F-statistic:   77 on 1 and 399 DF,  p-value: <2e-16

14 Supplemental Analyses: Conditional Parallel Mediation (a1 and c’ moderated)

cond.parallel2 <- '
  # direct effect
    orgdehum ~ c*sblmc
  # mediators
    exploitatt ~ a1*sblmc + a3*soec + a4*sblmcxsoec
    wbatt ~ a2*sblmc
    orgdehum ~ b1*exploitatt + b2*wbatt + b3*soec + b4*sblmcxsoec
  # indirect effects
    a1b1 := a1*b1
    a2b2 := a2*b2
  # index of moderated mediation
    a4b1 := a4*b1
  # total indirect effect
    total := a1b1 + a2b2
'

cond.parallel.fit2 <- sem(cond.parallel2, data = dat, se = "boot", bootstrap = 10000, meanstructure = TRUE)
parameterEstimates(cond.parallel.fit2, boot.ci.type = "perc")
parameterEstimates(cond.parallel.fit2, boot.ci.type = "bca.simple")
summary(cond.parallel.fit2, standardized = FALSE)
lavaan 0.6-7 ended normally after 24 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         15
                                                      
                                                  Used       Total
  Number of observations                           400         401
                                                                  
Model Test User Model:
                                                      
  Test statistic                               102.895
  Degrees of freedom                                 3
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws            10000
  Number of successful bootstrap draws           10000

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  orgdehum ~                                          
    sblmc      (c)    0.358    0.041    8.753    0.000
  exploitatt ~                                        
    sblmc     (a1)    0.515    0.040   12.814    0.000
    soec      (a3)   -0.193    0.063   -3.082    0.002
    sblmcxsoc (a4)    0.057    0.028    2.066    0.039
  wbatt ~                                             
    sblmc     (a2)   -0.384    0.049   -7.858    0.000
  orgdehum ~                                          
    exploittt (b1)    0.271    0.043    6.225    0.000
    wbatt     (b2)   -0.171    0.035   -4.815    0.000
    soec      (b3)   -0.182    0.046   -4.008    0.000
    sblmcxsoc (b4)    0.053    0.018    2.870    0.004

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          3.656    0.223   16.372    0.000
   .exploitatt        3.379    0.068   49.730    0.000
   .wbatt             4.459    0.079   56.559    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .orgdehum          0.709    0.057   12.452    0.000
   .exploitatt        1.554    0.115   13.477    0.000
   .wbatt             2.484    0.164   15.105    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    a1b1              0.139    0.026    5.388    0.000
    a2b2              0.066    0.016    4.072    0.000
    a4b1              0.016    0.008    1.915    0.056
    total             0.205    0.031    6.659    0.000
inspect(cond.parallel.fit2, "rsquare")
  orgdehum exploitatt      wbatt 
     0.667      0.394      0.162 

Calculating F

df1 <- k <- length(c("b1", "b2", "b3", "b4", "c"))
n <- nobs(cond.parallel.fit2)
df2 <- n - k
r2 <- inspect(cond.parallel.fit2, "rsquare")[[1]]
fstat <- (r2/(1-r2))*(df2/df1) # F-statistic

data.frame("F-statistic" = fstat, "df1" = df1, "df2" = df2)

15 Supplemental Analyses: Examining HR Practices

15.1 HR Practices Descriptives

dat %>%
  group_by(selection) %>%
  tally()

Few people experience no selection practices at all.

dat %>%
  group_by(training) %>%
  tally()
dat %>%
  group_by(appraisal) %>%
  tally()
dat %>%
  group_by(compensation) %>%
  tally()
dat %>%
  group_by(hrpractices) %>%
  tally()

15.2 HR Practices Correlations

source("corstars.R")

dat %>%
  select(hrpractices, selection:compensation, orgdehum, exploitatt:wbatt, sblm, orgdehum, pos) %>%
  as.matrix(.) %>%
  corstars(., method = "pearson")

Sum of HR practices generally seems to be related to positive outcomes.

15.3 HR Practice Descriptive: Specific Items

dat %>%
  summarise_at(vars(selection_1:compens_3), sum, na.rm = FALSE)

15.4 HR Practice Correlations: Specific Items

source("corstars.R")

dat %>%
  select(selection_1:compens_3, orgdehum, exploitatt:wbatt, sblm) %>%
  as.matrix(.) %>%
  corstars(., method = "pearson")

16 Supplemental Analyses: Demographic Differences


16.1 Region

dat %>%
  group_by(region) %>%
  tally()
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "region", na.rm = TRUE)
NaNs produced
summary(aov(orgdehum ~ region, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
region        3      1   0.422    0.19    0.9
Residuals   395    879   2.226               
2 observations deleted due to missingness
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "region", na.rm = TRUE)
NaNs produced
summary(aov(sblm ~ region, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
region        3      1    0.36    0.11   0.95
Residuals   396   1303    3.29               
1 observation deleted due to missingness
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "region", na.rm = TRUE)
NaNs produced
summary(aov(exploitatt ~ region, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
region        3      2   0.572    0.22   0.88
Residuals   396   1021   2.577               
1 observation deleted due to missingness
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "wbatt", groupvars = "region", na.rm = TRUE)
NaNs produced
summary(aov(wbatt ~ region, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
region        3      5    1.76    0.59   0.62
Residuals   396   1174    2.96               
1 observation deleted due to missingness

No significant mean differences in variables of interest across regions.


16.2 Industry

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)
NaNs produced
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE)
NaNs produced
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "industry", na.rm = TRUE)
NaNs produced
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "wbatt", groupvars = "industry", na.rm = TRUE)
NaNs produced

Note: Very low n-size for certain industries. Consider dropping groups.

Specifically, the following categories have N < 20:

dat %>%
  group_by(industry) %>%
  select(industry) %>%
  count() %>%
  filter(freq < 20)

16.2.1 ANOVA (Org Dehumanization)

Test for homogeneity of variance first. Use the non-parametric Fligner-Killeen Test.

fligner.test(orgdehum ~ industry, data = dat)

    Fligner-Killeen test of homogeneity of variances

data:  orgdehum by industry
Fligner-Killeen:med chi-squared = 15, df = 18, p-value = 0.6
fligner.test(sblm ~ industry, data = dat)

    Fligner-Killeen test of homogeneity of variances

data:  sblm by industry
Fligner-Killeen:med chi-squared = 19, df = 18, p-value = 0.4
fligner.test(exploitatt ~ industry, data = dat)

    Fligner-Killeen test of homogeneity of variances

data:  exploitatt by industry
Fligner-Killeen:med chi-squared = 16, df = 18, p-value = 0.6
fligner.test(wbatt ~ industry, data = dat)

    Fligner-Killeen test of homogeneity of variances

data:  wbatt by industry
Fligner-Killeen:med chi-squared = 7.5, df = 18, p-value = 1
summary(aov(orgdehum ~ industry, data = dat))
             Df Sum Sq Mean Sq F value  Pr(>F)    
industry     18     97    5.41    2.62 0.00037 ***
Residuals   381    787    2.07                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
1 observation deleted due to missingness

Significant mean difference in organizational dehumanization between industries.

16.2.2 Tukey Test (Org Dehumanization)

tukey.odhindustry <- tidy(TukeyHSD(aov(orgdehum ~ industry, data = dat)))

tukey.odhindustry %>%
  select(-term) %>%
  filter(adj.p.value < .05)

None of the groups compared above had N < 20.

16.2.3 Create labels with capitalized letters for graphing

dat$industry <- as.factor(dat$industry)

16.2.4 Visualization (Org Dehumanization)

source("summarySE.R")

dat %>%
  select(industry, orgdehum) %>%
  filter(industry %in% c("arts, entertainment, recreation", "accommodation, food services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("arts, entertainment, recreation", "accommodation, food services")) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = orgdehum, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Accommodation, Food Services", "Arts, Entertainment, Recreation")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, orgdehum) %>%
  filter(industry %in% c("finance, insurance", "accommodation, food services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("finance, insurance", "accommodation, food services")) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = orgdehum, group = industry, fill = industry)) +
  scale_fill_grey(start = .4, end = .8) +
  geom_bar(stat = "identity", width = 0.3) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Accommodation, Food Services", "Finance, Insurance")) +  
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, orgdehum) %>%
  filter(industry %in% c("retail trade", "arts, entertainment, recreation")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("retail trade", "arts, entertainment, recreation")) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = orgdehum, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Arts, Entertainment, Recreation", "Retail Trade")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, orgdehum) %>%
  filter(industry %in% c("retail trade", "educational services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("retail trade", "educational services")) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = orgdehum, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Educational Services", "Retail Trade")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, orgdehum) %>%
  filter(industry %in% c("retail trade", "finance, insurance")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("retail trade", "finance, insurance")) %>%
  summarySE(., measurevar = "orgdehum", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = orgdehum, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Finance, Insurance", "Retail Trade")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

16.2.5 ANOVA (BLM)

summary(aov(sblm ~ industry, data = dat))
             Df Sum Sq Mean Sq F value  Pr(>F)    
industry     18    139    7.73    2.53 0.00059 ***
Residuals   382   1167    3.05                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Significant mean difference in BLM between industries.

16.2.6 Tukey Test (BLM)

tukey.sblmindustry <- tidy(TukeyHSD(aov(sblm ~ industry, data = dat)))

tukey.sblmindustry %>%
  select(-term) %>%
  filter(adj.p.value < .05)

16.2.7 Visualization (BLM)

source("summarySE.R")

dat %>%
  select(industry, sblm) %>%
  filter(industry %in% c("educational services", "accommodation, food services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("educational services", "accommodation, food services")) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = sblm, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Accommodation, Food Services", "Educational Services")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Supervisor's Bottom-Line Mentality") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, sblm) %>%
  filter(industry %in% c("finance, insurance", "accommodation, food services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("finance, insurance", "accommodation, food services")) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = sblm, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Accommodation, Food Services", "Finance, Insurance")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Supervisor's Bottom-Line Mentality") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, sblm) %>%
  filter(industry %in% c("retail trade", "educational services")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("retail trade", "educational services")) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = sblm, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Educational Services", "Retail Trade")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Supervisor's Bottom-Line Mentality") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

source("summarySE.R")

dat %>%
  select(industry, sblm) %>%
  filter(industry %in% c("retail trade", "finance, insurance")) %>%
  group_by(industry) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE)

dat %>%
  filter(industry %in% c("retail trade", "finance, insurance")) %>%
  summarySE(., measurevar = "sblm", groupvars = "industry", na.rm = TRUE) %>%
  ggplot(aes(x = industry, y = sblm, group = industry, fill = industry)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), size = 0.5, width = 0.07) +
  scale_x_discrete(labels = c("Finance, Insurance", "Retail Trade")) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Industry", y = "Supervisor's Bottom-Line Mentality") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

16.2.8 ANOVA (HR Attributions)

summary(aov(exploitatt ~ industry, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)  
industry     18     71    3.94    1.57  0.064 .
Residuals   382    957    2.51                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(aov(wbatt ~ industry, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)  
industry     18     79    4.36    1.51  0.084 .
Residuals   382   1107    2.90                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

No significant mean differences in attributions across industries. However, p-values may be considered “marginal”.


16.3 Marital Status

dat %>%
  group_by(marital) %>%
  tally()
dat %>%
  group_by(marital) %>%
  summarize(orgdehum = mean(orgdehum, na.rm = TRUE),
            sblm = mean(sblm, na.rm = TRUE),
            exploitatt = mean(exploitatt, na.rm = TRUE),
            wbatt = mean(wbatt, na.rm = TRUE))
summary(aov(orgdehum ~ marital, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
marital       5     14    2.80    1.27   0.28
Residuals   394    870    2.21               
1 observation deleted due to missingness
summary(aov(sblm ~ marital, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
marital       5     13    2.61     0.8   0.55
Residuals   395   1293    3.27               
summary(aov(exploitatt ~ marital, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)  
marital       5     27    5.35    2.11  0.063 .
Residuals   395   1001    2.53                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(aov(wbatt ~ marital, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)  
marital       5     31    6.23    2.13  0.061 .
Residuals   395   1154    2.92                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

No significant mean differences in variables of interest across marital status.


16.4 Race

dat %>%
  select(race) %>%
  group_by(race) %>%
  tally()
dat %>%
  group_by(race) %>%
  summarize(orgdehum = mean(orgdehum, na.rm = TRUE),
            sblm = mean(sblm, na.rm = TRUE),
            exploitatt = mean(exploitatt, na.rm = TRUE),
            wbatt = mean(wbatt, na.rm = TRUE))
summary(aov(orgdehum ~ race, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
race          4      7    1.78     0.8   0.52
Residuals   395    877    2.22               
1 observation deleted due to missingness
summary(aov(sblm ~ race, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
race          4     18    4.57    1.41   0.23
Residuals   396   1287    3.25               
summary(aov(exploitatt ~ race, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)  
race          4     22    5.47    2.15  0.074 .
Residuals   396   1006    2.54                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(aov(wbatt ~ race, data = dat))
             Df Sum Sq Mean Sq F value Pr(>F)
race          4     18    4.54    1.54   0.19
Residuals   396   1167    2.95               

No significant mean differences in variables of interest across races. Notably, however, Black employees appear to differ slightly.


16.5 Org Type

Organization type (for-profit vs nonprofit) was correlated with several variables of interest.

16.5.1 Variable Preparation

dat %<>%
  mutate(orgtype = recode_factor(orgtype, `1` = "For-profit",
                          `0` = "Nonprofit"))

16.5.2 Organization Type and Dehumanization

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "orgtype", na.rm = TRUE)
t.test(dat$orgdehum ~ dat$orgtype)

    Welch Two Sample t-test

data:  dat$orgdehum by dat$orgtype
t = 3.1, df = 142, p-value = 0.002
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1969 0.8662
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.880                    3.348 
t.test(dat$orgdehum ~ dat$orgtype, var.equal = TRUE)

    Two Sample t-test

data:  dat$orgdehum by dat$orgtype
t = 2.9, df = 398, p-value = 0.004
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.174 0.889
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.880                    3.348 

Significant mean difference between groups. Tests assuming equal and unequal variances yield similar results.

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "orgtype", na.rm = TRUE) %>%
  ggplot(aes(x = orgtype, y = orgdehum, group = orgtype, fill = orgtype)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Organization Type", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

Note: Error bars reflect confidence intervals.

16.5.3 Organization Type and Exploitation Attributions

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "orgtype", na.rm = TRUE)
t.test(dat$exploitatt ~ dat$orgtype)

    Welch Two Sample t-test

data:  dat$exploitatt by dat$orgtype
t = 3, df = 145, p-value = 0.003
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1818 0.8933
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.461                    2.924 
t.test(dat$exploitatt ~ dat$orgtype, var.equal = TRUE)

    Two Sample t-test

data:  dat$exploitatt by dat$orgtype
t = 2.7, df = 399, p-value = 0.006
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1522 0.9228
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.461                    2.924 
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "orgtype", na.rm = TRUE) %>%
  ggplot(aes(x = orgtype, y = exploitatt, group = orgtype, fill = orgtype)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = exploitatt - ci, ymax = exploitatt + ci), size = 0.5, width = 0.07) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Organization Type", y = "Organization-Centric HR Attributions") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

Note: Error bars reflect confidence intervals.

16.5.4 Organization Type and BLM

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "orgtype", na.rm = TRUE)
t.test(dat$sblm ~ dat$orgtype)

    Welch Two Sample t-test

data:  dat$sblm by dat$orgtype
t = 3.5, df = 129, p-value = 7e-04
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.3298 1.1922
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.511                    2.750 
t.test(dat$sblm ~ dat$orgtype, var.equal = TRUE)

    Two Sample t-test

data:  dat$sblm by dat$orgtype
t = 3.5, df = 399, p-value = 6e-04
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.3291 1.1929
sample estimates:
mean in group For-profit  mean in group Nonprofit 
                   3.511                    2.750 
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "orgtype", na.rm = TRUE) %>%
  ggplot(aes(x = orgtype, y = sblm, group = orgtype, fill = orgtype)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), size = 0.5, width = 0.07) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Organization Type", y = "Supervisor's Bottom-line Mentality") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

Note: Error bars reflect confidence intervals.


16.6 Org Levels

16.6.1 Org Levels and Variables of Interest

cor.test(dat$orglevels, dat$exploitatt, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$orglevels and dat$exploitatt
S = 9192951, p-value = 0.004
alternative hypothesis: true rho is not equal to 0
sample estimates:
   rho 
0.1446 

Output for Spearman’s rho yields a warning that data samples contains correlated ties. Kendall’s tau-b coefficient can handle ties (below).

cor.test(dat$orglevels, dat$exploitatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orglevels and dat$exploitatt
z = 2.9, p-value = 0.004
alternative hypothesis: true tau is not equal to 0
sample estimates:
   tau 
0.1102 
cor.test(dat$orglevels, dat$orgdehum, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$orglevels and dat$orgdehum
S = 9286840, p-value = 0.01
alternative hypothesis: true rho is not equal to 0
sample estimates:
   rho 
0.1294 
cor.test(dat$orglevels, dat$orgdehum,  method = "kendall")

    Kendall's rank correlation tau

data:  dat$orglevels and dat$orgdehum
z = 2.6, p-value = 0.01
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
0.09593 

Significant positive correlation between org levels and org dehumanization.

cor.test(dat$orglevels, dat$sblm, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orglevels and dat$sblm
z = -0.71, p-value = 0.5
alternative hypothesis: true tau is not equal to 0
sample estimates:
     tau 
-0.02697 
cor.test(dat$orglevels, dat$wbatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$orglevels and dat$wbatt
z = -0.4, p-value = 0.7
alternative hypothesis: true tau is not equal to 0
sample estimates:
     tau 
-0.01509 

No significant rank correlation between org levels and BLM or well-being attributions.

16.6.2 Variable Preparation for Visualization

dat %<>%
  mutate(orglevels = recode_factor(orglevels, `1` = "three or fewer levels",
                                   `2` = "four levels",
                                   `3` = "five levels",
                                   `4` = "six levels",
                                   `5` = "seven levels or more", .ordered = TRUE))

16.6.3 Org Levels and Exploitation Attributions

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "orglevels")
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "orglevels") %>%
  ggplot(aes(x = orglevels, y = exploitatt, group = 1)) + 
    geom_errorbar(aes(ymin = exploitatt - ci, ymax = exploitatt + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(1,5)) +
    labs(x = "Levels in Organization", y = "Exploitation Attributions") +
    theme_classic() + guides(fill = FALSE)

Note: Error bars reflect confidence intervals.

Confidence intervals appear to overlap substantially.

16.6.4 Org Levels and Organizational Dehumanization

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "orglevels", na.rm = TRUE)
dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "orglevels", na.rm = TRUE) %>%
  ggplot(aes(x = orglevels, y = orgdehum, group = 1)) + 
    geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(1,5)) +
    labs(x = "Levels in Organization", y = "Exploitation Attributions") +
    theme_classic() + guides(fill = FALSE)

Note: Error bars reflect confidence intervals.

Confidence intervals appear to overlap substantially.


16.7 Salary

Note: Add argument subset = (dat$salary != 1) to remove low N group.

cor.test(dat$salary, dat$exploitatt, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$salary and dat$exploitatt
S = 1.2e+07, p-value = 0.01
alternative hypothesis: true rho is not equal to 0
sample estimates:
    rho 
-0.1235 
cor.test(dat$salary, dat$exploitatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$salary and dat$exploitatt
z = -2.5, p-value = 0.01
alternative hypothesis: true tau is not equal to 0
sample estimates:
     tau 
-0.09148 

Significant negative correlation between salary and exploitation attributions.

cor.test(dat$salary, dat$sblm, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$salary and dat$sblm
S = 1.3e+07, p-value = 4e-05
alternative hypothesis: true rho is not equal to 0
sample estimates:
    rho 
-0.2049 
cor.test(dat$salary, dat$sblm, method = "kendall")

    Kendall's rank correlation tau

data:  dat$salary and dat$sblm
z = -4.1, p-value = 4e-05
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.1517 

Significant negative correlation between salary and BLM.

cor.test(dat$salary, dat$orgdehum, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$salary and dat$orgdehum
S = 1.3e+07, p-value = 3e-05
alternative hypothesis: true rho is not equal to 0
sample estimates:
    rho 
-0.2071 
cor.test(dat$salary, dat$orgdehum, method = "kendall")

    Kendall's rank correlation tau

data:  dat$salary and dat$orgdehum
z = -4.1, p-value = 4e-05
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
-0.1486 

Significant negative correlation between salary and organizational dehumanization.

cor.test(dat$salary, dat$wbatt, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$salary and dat$wbatt
S = 9381537, p-value = 0.01
alternative hypothesis: true rho is not equal to 0
sample estimates:
  rho 
0.127 
cor.test(dat$salary, dat$wbatt, method = "kendall")

    Kendall's rank correlation tau

data:  dat$salary and dat$wbatt
z = 2.5, p-value = 0.01
alternative hypothesis: true tau is not equal to 0
sample estimates:
    tau 
0.09412 

Significant positive correlation between salary and well-being attributions.

16.7.1 Variable Preparation for Visualization

dat %<>%
  mutate(salary = recode_factor(salary, `1` = "less than $10,000",
                                `2` = "$10,000 to $19,999",
                                `3` = "$20,000 to $29,999",
                                `4` = "$30,000 to $39,999",
                                `5` = "$40,000 to $49,999",
                                `6` = "$50,000 to $59,999",
                                `7` = "$60,000 to $69,999",
                                `8` = "$70,000 or more", .ordered = TRUE))

16.7.2 Salary and Exploitation Attributions

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "salary", na.rm = TRUE)

Perhaps omit individuals with salary < $10,000 due to low N-size?

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "exploitatt", groupvars = "salary", na.rm = TRUE) %>%
  ggplot(aes(x = salary, y = exploitatt, group = 1)) + 
    geom_errorbar(aes(ymin = exploitatt - ci, ymax = exploitatt + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Salary", y = "Exploitation Attributions") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

Note: Error bars reflect confidence intervals. CIs for lowest salary group does not fit within y-scale.

16.7.3 Salary and Supervisor’s Bottom-line Mentality

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "salary", na.rm = TRUE)
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "salary", na.rm = TRUE) %>%
  ggplot(aes(x = salary, y = sblm, group = 1)) + 
    geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Salary", y = "Supervisor's Bottom-line Mentality") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

16.7.4 Salary and Organizational Dehumanization

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "salary", na.rm = TRUE)
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "salary", na.rm = TRUE) %>%
  ggplot(aes(x = salary, y = orgdehum, group = 1)) + 
    geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Salary", y = "Organizational Dehumanization") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

16.7.5 Salary and Well-being Attributions

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "wbatt", groupvars = "salary", na.rm = TRUE)
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "wbatt", groupvars = "salary", na.rm = TRUE) %>%
  ggplot(aes(x = salary, y = wbatt, group = 1)) + 
    geom_errorbar(aes(ymin = wbatt - ci, ymax = wbatt + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Salary", y = "Well-being Attributions") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))


16.8 Education

cor.test(dat$edu, dat$sblm, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$edu and dat$sblm
S = 1.3e+07, p-value = 3e-04
alternative hypothesis: true rho is not equal to 0
sample estimates:
    rho 
-0.1811 
cor.test(dat$edu, dat$sblm, method = "kendall")

    Kendall's rank correlation tau

data:  dat$edu and dat$sblm
z = -3.6, p-value = 3e-04
alternative hypothesis: true tau is not equal to 0
sample estimates:
  tau 
-0.14 

Significant negative correlation between education and BLM.

cor.test(dat$edu, dat$orgdehum, method = "spearman")
Cannot compute exact p-value with ties

    Spearman's rank correlation rho

data:  dat$edu and dat$orgdehum
S = 1.2e+07, p-value = 0.01
alternative hypothesis: true rho is not equal to 0
sample estimates:
    rho 
-0.1239 
cor.test(dat$edu, dat$orgdehum, method = "kendall")

    Kendall's rank correlation tau

data:  dat$edu and dat$orgdehum
z = -2.5, p-value = 0.01
alternative hypothesis: true tau is not equal to 0
sample estimates:
     tau 
-0.09336 

Significant negative correlation between education and org dehumanization.

16.8.1 Variable Preparation for Visualization

dat %<>%
  mutate(edu = recode_factor(edu, `1` = "high school, GED",
                             `2` = "associates",
                             `3` = "college",
                             `4` = "masters",
                             `5` = "doctoral", .ordered = TRUE))

16.8.2 Education and BLM

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "edu", na.rm = TRUE)
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "sblm", groupvars = "edu", na.rm = TRUE) %>%
  ggplot(aes(x = edu, y = sblm, group = 1)) + 
    geom_errorbar(aes(ymin = sblm - ci, ymax = sblm + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Education", y = "Supervisor's Bottom-line Mentality") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

16.8.3 Education and Org Dehumanization

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "edu", na.rm = TRUE)
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "edu", na.rm = TRUE) %>%
  ggplot(aes(x = edu, y = orgdehum, group = 1)) + 
    geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), width=.1) +
    geom_line() + geom_point() +
    scale_y_continuous(expand = c(0,0), limits = c(0,7)) +
    labs(x = "Education", y = "Organizational Dehumanization") +
    theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

Notably, education is positively related to salary and responsibility for direct reports.


16.9 Responsible for Direct Reports

Responsibility for direct reports correlated with well-being attributions and org dehumanization.

16.9.1 Variable Preparation

dat %<>%
  mutate(dirreport = recode_factor(dirreport, `1` = "Yes",
                                   `0` = "No"))

16.9.2 Responsibility and Well-being Attributions

source("summarySE.R")

dat%>%
  summarySE(., measurevar = "wbatt", groupvars = "dirreport", na.rm = TRUE)
t.test(dat$wbatt ~ dat$dirreport, var.equal = TRUE)

    Two Sample t-test

data:  dat$wbatt by dat$dirreport
t = 2.3, df = 399, p-value = 0.02
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.06015 0.73940
sample estimates:
mean in group Yes  mean in group No 
            4.688             4.288 
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "wbatt", groupvars = "dirreport", na.rm = TRUE) %>%
  ggplot(aes(x = dirreport, y = wbatt, group = dirreport, fill = dirreport)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = wbatt - ci, ymax = wbatt + ci), size = 0.5, width = 0.07) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Responsibility for Direct Reports", y = "Employee-Centric HR Attributions") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

Note: Error bars represent confidence intervals.

Although t-test is significant, confidence intervals overlap.

16.9.3 Responsibility and Org Dehumanization

source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "dirreport", na.rm = TRUE)
t.test(dat$orgdehum ~ dat$dirreport, var.equal = TRUE)

    Two Sample t-test

data:  dat$orgdehum by dat$dirreport
t = -2.1, df = 398, p-value = 0.03
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.61507 -0.02656
sample estimates:
mean in group Yes  mean in group No 
            3.587             3.907 
source("summarySE.R")

dat %>%
  summarySE(., measurevar = "orgdehum", groupvars = "dirreport", na.rm = TRUE) %>%
  ggplot(aes(x = dirreport, y = orgdehum, group = dirreport, fill = dirreport)) +
  geom_bar(stat = "identity", width = 0.3) +
  scale_fill_grey(start = .4, end = .8) +
  geom_errorbar(aes(ymin = orgdehum - ci, ymax = orgdehum + ci), size = 0.5, width = 0.07) +
  scale_y_continuous(expand = c(0,0), limits = c(0,7), breaks = c(1:7)) +
  labs(x = "Responsibility for Direct Reports", y = "Organizational Dehumanization") +
  theme(text = element_text(size = 13)) + guides(fill = FALSE)

Note: Error bars represent confidence intervals.

Although t-test is significant, confidence intervals overlap.


LS0tCnRpdGxlOiAiRGlzc2VydGF0aW9uIEFuYWx5c2lzIENvbXBpbGVkIgphdXRob3I6ICJTdGV2ZW4gVC4gVHNlbmciCmRhdGU6ICdgciBwYXN0ZSgiRmlyc3QgY3JlYXRlZCBvbiBEZWMgMjQsIDIwMTkuIFVwZGF0ZWQgb24iLCBTeXMuRGF0ZSgpKWAnCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShwc3ljaCkKbGlicmFyeShsYXR0aWNlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkobGF2YWFuKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KGJyb29tKQoKb3B0aW9ucyhkaWdpdHMgPSAzKQp0aGVtZV9zZXQodGhlbWVfY2xhc3NpYygpKQoKZGF0IDwtIHJlYWRfeGxzeCgiLi9EaXNzZXJ0YXRpb24gRGF0YS9kaXNzZXJ0YXRpb25kYXRhQ09NUExFVEUueGxzeCIpCmBgYAoKCioqKioKCiMgU2NhbGUgUmVsaWFiaWxpdGllcwoKIyMgT3JnIERlaHVtYW5pemF0aW9uCgpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChvcmdkZWh1bV8xOm9yZ2RlaHVtXzExKSAlPiUKICBhcy5kYXRhLmZyYW1lKC4pICU+JQogIHBzeWNoOjphbHBoYSguKQpgYGAKKioqQWxwaGEgaW1wcm92ZXMgdG8gLjk2IGlmIEl0ZW0gMSBpcyBkcm9wcGVkCgojIyBIUiBBdHRyaWJ1dGlvbnMKCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KGV4cGxvaXRfMTp3YmF0dF8zKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgpIb3JyaWJsZSBhbHBoYSwgYXMgZXhwZWN0ZWQuIFNjYWxlIGNvbnNpc3RzIG9mIHR3byBjb25jZXB0dWFsbHkgZGlzdGluY3QgZmFjdG9ycy4KCiMjIEV4cGxvaXRhdGlvbiBBdHRyaWJ1dGlvbnMKYGBge3J9CmRhdCAlPiUKICBzZWxlY3QoZXhwbG9pdF8xOmV4cGxvaXRfMykgJT4lCiAgcHN5Y2g6OmFscGhhKC4pCmBgYAoKIyMgQ29zdC1zYXZpbmcgQXR0cmlidXRpb25zCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KGNvc3RfMTpjb3N0XzMpICU+JQogIHBzeWNoOjphbHBoYSguKQpgYGAKCiMjIFBlcmZvcm1hbmNlIEF0dHJpYnV0aW9ucwpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChwZXJmYXR0XzE6cGVyZmF0dF8zKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCkFscGhhIGltcHJvdmVzIHRvIC45MyBpZiBJdGVtIDMgZHJvcHBlZAoKIyMgV2VsbC1iZWluZyBBdHRyaWJ1dGlvbnMKYGBge3J9CmRhdCAlPiUKICBzZWxlY3Qod2JhdHRfMTp3YmF0dF8zKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBCTE0KYGBge3J9CmRhdCAlPiUKICBzZWxlY3Qoc2JsbV8xOnNibG1fNCkgJT4lCiAgcHN5Y2g6OmFscGhhKC4pCmBgYAoKIyMgU09FCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KHNvZV8xOnNvZV85KSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBKb2IgU2F0aXNmYWN0aW9uCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KGpvYnNhdF8xOmpvYnNhdF8zKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBBZmZlY3RpdmUgQ29tbWl0bWVudApgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChhY29tbWl0XzE6YWNvbW1pdF82KSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBUdXJub3ZlciBJbnRlbnRpb25zCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KHRvaW50ZW50XzE6dG9pbnRlbnRfMikgJT4lCiAgcHN5Y2g6OmFscGhhKC4pCmBgYAoKIyMgQnVybm91dApgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChkaXNlbmdfMXI6ZXhoYXVzdF84cikgJT4lCiAgcHN5Y2g6OmFscGhhKC4pCmBgYAoKIyMgQnVybm91dDogRGlzZW5nYWdlbWVudApgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChkaXNlbmdfMXIsIGRpc2VuZ18yLCBkaXNlbmdfMywgZGlzZW5nXzRyLCBkaXNlbmdfNSwgZGlzZW5nXzYsIGRpc2VuZ183ciwgZGlzZW5nXzhyKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBCdXJub3V0OiBFeGhhdXN0aW9uCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KGV4aGF1c3RfMSwgZXhoYXVzdF8yLCBleGhhdXN0XzNyLCBleGhhdXN0XzQsIGV4aGF1c3RfNXIsIGV4aGF1c3RfNiwgZXhoYXVzdF83ciwgZXhoYXVzdF84cikgJT4lCiAgcHN5Y2g6OmFscGhhKC4pCmBgYAoqKioqQWxwaGEgaW1wcm92ZXMgdG8gLjg4IGlmIEl0ZW0gN3IgZHJvcHBlZAoKIyMgVGFzayBQZXJmb3JtYW5jZQpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChwZXJmXzE6cGVyZl81KSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCioqKipBbHBoYSBpbXByb3ZlcyB0byAuODk3IGlmIEl0ZW0gNSBkcm9wcGVkIAoKIyMgT0NCcwpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChvY2JfMTpvY2JfMTApICU+JQogIHBzeWNoOjphbHBoYSguKQpgYGAKCiMjIENXQnMKYGBge3J9CmRhdCAlPiUKICBzZWxlY3QoY3diXzE6Y3diXzEwKSAlPiUKICBwc3ljaDo6YWxwaGEoLikKYGBgCgojIyBQT1MKYGBge3J9CmRhdCAlPiUKICBzZWxlY3QocG9zXzE6cG9zXzgpICU+JQogIHBzeWNoOjphbHBoYSguKQpgYGAKCioqKioKCiMgRmFjdG9yIFN0cnVjdHVyZXMKCiMjIEV4YW1pbmUgSFIgQXR0cmlidXRpb25zIEZhY3RvciBTdHJ1Y3R1cmUKYGBge3J9CmhyYXR0Lm1vZGVsIDwtICdleHBsb2l0ID1+IGV4cGxvaXRfMSArIGV4cGxvaXRfMiArIGV4cGxvaXRfMwogICAgICAgICAgICAgICAgY29zdCA9fiBjb3N0XzEgKyBjb3N0XzIgKyBjb3N0XzMKICAgICAgICAgICAgICAgIHBlcmZvcm0gPX4gcGVyZmF0dF8xICsgcGVyZmF0dF8yICsgcGVyZmF0dF8zCiAgICAgICAgICAgICAgICB3YiA9fiB3YmF0dF8xICsgd2JhdHRfMiArIHdiYXR0XzMnCgpocmF0dC5maXQgPC0gY2ZhKGhyYXR0Lm1vZGVsLCBkYXRhID0gZGF0KQpzdW1tYXJ5KGhyYXR0LmZpdCwgZml0Lm1lYXN1cmVzID0gVFJVRSkKYGBgCioqKipBY2NlcHRhYmxlIGZpdCBtZWFzdXJlcwoKIyMgRXhhbWluZSBCdXJub3V0IEZhY3RvciBTdHJ1Y3R1cmUKYGBge3J9CmJ1cm5vdXQubW9kZWwgPC0gJ2Rpc2VuZ2FnZSA9fiBkaXNlbmdfMXIgKyBkaXNlbmdfMiArIGRpc2VuZ18zICsgZGlzZW5nXzRyICsgZGlzZW5nXzUgKyBkaXNlbmdfNiArIGRpc2VuZ183ciArIGRpc2VuZ184cgpleGhhdXN0aW9uID1+IGV4aGF1c3RfMSArIGV4aGF1c3RfMiArIGV4aGF1c3RfM3IgKyBleGhhdXN0XzQgKyBleGhhdXN0XzVyICsgZXhoYXVzdF82ICsgZXhoYXVzdF83ciArIGV4aGF1c3RfOHInCgpidXJub3V0LmZpdCA8LSBjZmEoYnVybm91dC5tb2RlbCwgZGF0YSA9IGRhdCkKc3VtbWFyeShidXJub3V0LmZpdCwgZml0Lm1lYXN1cmVzID0gVFJVRSkKYGBgCioqKipOb3QgdmVyeSBnb29kIGZpdAoKKioqKgoKIyBEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzCioqKioKIyMgRGVtb2dyYXBoaWNzCioqKioKIyMjIE9yZ2FuaXphdGlvbiBUeXBlCmBgYHtyfQpkYXQgJT4lCiAgbXV0YXRlKG9yZ3R5cGUgPSByZWNvZGUob3JndHlwZSwgYDBgID0gIm5vbnByb2ZpdCIsIGAxYCA9ICJmb3ItcHJvZml0IikpICU+JQogIHNlbGVjdChvcmd0eXBlKSAlPiUKICBncm91cF9ieShvcmd0eXBlKSAlPiUKICB0YWxseSgpCmBgYAoKIyMjIE9yZ2FuaXphdGlvbiBTaXplCmBgYHtyfQpkYXQgJT4lCiAgbXV0YXRlKG9yZ3NpemUgPSByZWNvZGVfZmFjdG9yKG9yZ3NpemUsIGAxYCA9ICJsZXNzIHRoYW4gMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICIxMCB0byA0OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYDNgID0gIjUwIHRvIDk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiMTAwIHRvIDQ5OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYDVgID0gIjUwMCB0byA5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGA2YCA9ICIxMDAwIG9yIG1vcmUiKSwgLm9yZGVyZWQgPSBUUlVFKSAlPiUKICBzZWxlY3Qob3Jnc2l6ZSkgJT4lCiAgZ3JvdXBfYnkob3Jnc2l6ZSkgJT4lCiAgdGFsbHkoKQoKZGF0ICU+JQogIG11dGF0ZShvcmdzaXplID0gcmVjb2RlX2ZhY3RvcihvcmdzaXplLCBgMWAgPSAibGVzcyB0aGFuIDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBgMmAgPSAiMTAgdG8gNDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGAzYCA9ICI1MCB0byA5OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYDRgID0gIjEwMCB0byA0OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICI1MDAgdG8gOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBgNmAgPSAiMTAwMCBvciBtb3JlIiksIC5vcmRlcmVkID0gVFJVRSkgJT4lCiAgc2VsZWN0KG9yZ3NpemUpICU+JQogIGJhcmNoYXJ0KC4pCmBgYAoKIyMjIE9yZ2FuaXphdGlvbiBMZXZlbHMKYGBge3J9CmRhdCAlPiUKICBtdXRhdGUob3JnbGV2ZWxzID0gcmVjb2RlX2ZhY3RvcihvcmdsZXZlbHMsIGAxYCA9ICJ0aHJlZSBvciBmZXdlciBsZXZlbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICJmb3VyIGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDNgID0gImZpdmUgbGV2ZWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAic2l4IGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDVgID0gInNldmVuIGxldmVscyBvciBtb3JlIiwgLm9yZGVyZWQgPSBUUlVFKSkgJT4lCiAgc2VsZWN0KG9yZ2xldmVscykgJT4lCiAgZ3JvdXBfYnkob3JnbGV2ZWxzKSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgbXV0YXRlKG9yZ2xldmVscyA9IHJlY29kZV9mYWN0b3Iob3JnbGV2ZWxzLCBgMWAgPSAidGhyZWUgb3IgZmV3ZXIgbGV2ZWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMmAgPSAiZm91ciBsZXZlbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzYCA9ICJmaXZlIGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDRgID0gInNpeCBsZXZlbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICJzZXZlbiBsZXZlbHMgb3IgbW9yZSIsIC5vcmRlcmVkID0gVFJVRSkpICU+JQogIHNlbGVjdChvcmdsZXZlbHMpICU+JQogIGJhcmNoYXJ0KC4pCmBgYAoKIyMjIE9yZ2FuaXphdGlvbiBDZW50cmFsaXR5CmBgYHtyfQpkYXQgJT4lCiAgbXV0YXRlKG9yZ2NlbnQgPSByZWNvZGVfZmFjdG9yKG9yZ2NlbnQsIGAxYCA9ICJDRU8sIHByZXNpZGVudCwgb3IgbWFuYWdpbmcgZGlyZWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMmAgPSAiY29ycG9yYXRlIG1hbmFnZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiYnJhbmNoIG1hbmFnZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiaW5wdXQgZnJvbSBmcm9udGxpbmUgZW1wbG95ZWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDVgID0gIm90aGVyIiksIC5vcmRlcmVkID0gVFJVRSkgJT4lCiAgc2VsZWN0KG9yZ2NlbnQpICU+JQogIGdyb3VwX2J5KG9yZ2NlbnQpICU+JQogIHRhbGx5KCkKCmRhdCAlPiUKICBtdXRhdGUob3JnY2VudCA9IHJlY29kZV9mYWN0b3Iob3JnY2VudCwgYDFgID0gIkNFTywgcHJlc2lkZW50LCBvciBtYW5hZ2luZyBkaXJlY3RvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICJjb3Jwb3JhdGUgbWFuYWdlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzYCA9ICJicmFuY2ggbWFuYWdlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA0YCA9ICJpbnB1dCBmcm9tIGZyb250bGluZSBlbXBsb3llZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNWAgPSAib3RoZXIiKSwgLm9yZGVyZWQgPSBUUlVFKSAlPiUKICBzZWxlY3Qob3JnY2VudCkgJT4lCiAgYmFyY2hhcnQoLikKYGBgCgojIyMgUmVnaW9uCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KHJlZ2lvbikgJT4lCiAgZ3JvdXBfYnkocmVnaW9uKSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgc2VsZWN0KHJlZ2lvbikgJT4lCiAgYmFyY2hhcnQoLikKYGBgCgojIyMgSW5kdXN0cnkKYGBge3J9CmRhdCAlPiUKICBzZWxlY3QoaW5kdXN0cnkpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgc2VsZWN0KGluZHVzdHJ5KSAlPiUKICBiYXJjaGFydCguKQpgYGAKCiMjIyBFbXBsb3ltZW50IFN0YXR1cwpgYGB7cn0KZGF0ICU+JQogIG11dGF0ZShzdGF0dXMgPSByZWNvZGUoc3RhdHVzLCBgMGAgPSAiZnVsbC10aW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGAxYCA9ICJwYXJ0LXRpbWUiKSkgJT4lICMgcmVjb2RlIGZ1bGwtdGltZSA9IDAsIHBhcnQtdGltZSA9IDEKICBzZWxlY3Qoc3RhdHVzKSAlPiUKICBncm91cF9ieShzdGF0dXMpICU+JQogIHRhbGx5KCkKYGBgCgoKIyMjIFJlc3BvbnNpYmxlIGZvciBEaXJlY3QgUmVwb3J0cwpgYGB7cn0KZGF0ICU+JQogIG11dGF0ZShkaXJyZXBvcnQgPSByZWNvZGUoZGlycmVwb3J0LCBgMWAgPSAieWVzIiwgYDBgID0gIm5vIikpICU+JQogIHNlbGVjdChkaXJyZXBvcnQpICU+JQogIGdyb3VwX2J5KGRpcnJlcG9ydCkgJT4lCiAgdGFsbHkoKQoKZGF0ICU+JQogIG11dGF0ZShkaXJyZXBvcnQgPSByZWNvZGUoZGlycmVwb3J0LCBgMWAgPSAieWVzIiwgYDBgID0gIm5vIikpICU+JQogIHNlbGVjdChkaXJyZXBvcnQpICU+JQogIGJhcmNoYXJ0KC4pCmBgYAoKIyMjIFNhbGFyeQpgYGB7cn0KZGF0ICU+JQogIG11dGF0ZShzYWxhcnkgPSByZWNvZGVfZmFjdG9yKHNhbGFyeSwgYDFgID0gImxlc3MgdGhhbiAkMTAsMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMmAgPSAiJDEwLDAwMCB0byAkMTksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiJDIwLDAwMCB0byAkMjksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiJDMwLDAwMCB0byAkMzksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNWAgPSAiJDQwLDAwMCB0byAkNDksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNmAgPSAiJDUwLDAwMCB0byAkNTksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgN2AgPSAiJDYwLDAwMCB0byAkNjksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOGAgPSAiJDcwLDAwMCBvciBtb3JlIiwgLm9yZGVyZWQgPSBUUlVFKSkgJT4lCiAgc2VsZWN0KHNhbGFyeSkgJT4lCiAgZ3JvdXBfYnkoc2FsYXJ5KSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgbXV0YXRlKHNhbGFyeSA9IHJlY29kZV9mYWN0b3Ioc2FsYXJ5LCBgMWAgPSAibGVzcyB0aGFuICQxMCwwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICIkMTAsMDAwIHRvICQxOSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzYCA9ICIkMjAsMDAwIHRvICQyOSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA0YCA9ICIkMzAsMDAwIHRvICQzOSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICIkNDAsMDAwIHRvICQ0OSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA2YCA9ICIkNTAsMDAwIHRvICQ1OSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA3YCA9ICIkNjAsMDAwIHRvICQ2OSw5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA4YCA9ICIkNzAsMDAwIG9yIG1vcmUiLCAub3JkZXJlZCA9IFRSVUUpKSAlPiUKICBzZWxlY3Qoc2FsYXJ5KSAlPiUKICBiYXJjaGFydCguKQpgYGAKCiMjIyBXZWVrbHkgSG91cnMKYGBge3J9CmRhdCAlPiUKICBkcGx5cjo6c2VsZWN0KHdlZWtob3VycykKZGF0ICU+JQogIGRwbHlyOjpzZWxlY3Qod2Vla2hvdXJzKSAlPiUKICBmaWx0ZXIod2Vla2hvdXJzIDwgMjUpCmRhdCAlPiUKICBkcGx5cjo6c2VsZWN0KHdlZWtob3VycykgJT4lCiAgZmlsdGVyKHdlZWtob3VycyA+PSA0MCkKaGlzdG9ncmFtKGRhdCR3ZWVraG91cnMsIHR5cGUgPSAiY291bnQiLCBicmVha3MgPSBjKDcuNTo3Mi41KSkKYGBgCgoKIyMjIEdlbmRlcgpgYGB7cn0KZGF0ICU+JQogIG11dGF0ZShnZW5kZXIgPSByZWNvZGUoZ2VuZGVyLCBgMGAgPSAibWFsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDFgID0gImZlbWFsZSIpKSAlPiUKICBzZWxlY3QoZ2VuZGVyKSAlPiUKICBncm91cF9ieShnZW5kZXIpICU+JQogIHRhbGx5KCkKCmRhdCAlPiUKICBtdXRhdGUoZ2VuZGVyID0gcmVjb2RlX2ZhY3RvcihnZW5kZXIsIGAwYCA9ICJtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAxYCA9ICJmZW1hbGUiKSkgJT4lCiAgc2VsZWN0KGdlbmRlcikgJT4lCiAgYmFyY2hhcnQoLikKYGBgCgojIyMgQWdlCmBgYHtyfQpkYXQgJT4lCiAgbXV0YXRlKGFnZSA9IHJlY29kZV9mYWN0b3IoYWdlLCBgMWAgPSAiMTgtMjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICIyNS0zMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDNgID0gIjMxLTQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiNDEtNTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICI1MS02MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDZgID0gIm92ZXIgNjAiKSkgJT4lCiAgc2VsZWN0KGFnZSkgJT4lCiAgZ3JvdXBfYnkoYWdlKSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgbXV0YXRlKGFnZSA9IHJlY29kZV9mYWN0b3IoYWdlLCBgMWAgPSAiMTgtMjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICIyNS0zMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDNgID0gIjMxLTQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiNDEtNTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICI1MS02MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDZgID0gIm92ZXIgNjAiKSkgJT4lCiAgc2VsZWN0KGFnZSkgJT4lCiAgYmFyY2hhcnQoLikKYGBgCgojIyMgUmFjZQpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChyYWNlKSAlPiUKICBncm91cF9ieShyYWNlKSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgc2VsZWN0KHJhY2UpICU+JQogIGJhcmNoYXJ0KC4pCmBgYAoKIyMjIEVuZ2xpc2ggRmlyc3QgTGFuZ3VhZ2UKYGBge3J9CmRhdCAlPiUKICBtdXRhdGUoZW5nbGlzaCA9IHJlY29kZShlbmdsaXNoLCBgMWAgPSAiZW5nbGlzaCBmaXJzdCBsYW5ndWFnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAwYCA9ICJlbmdsaXNoIG5vdCBmaXJzdCBsYW5ndWFnZSIpKSAlPiUKICBzZWxlY3QoZW5nbGlzaCkgJT4lCiAgZ3JvdXBfYnkoZW5nbGlzaCkgJT4lCiAgdGFsbHkoKQpgYGAKCiMjIyBNYXJpdGFsIFN0YXR1cwpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChtYXJpdGFsKSAlPiUKICBncm91cF9ieShtYXJpdGFsKSAlPiUKICB0YWxseSgpCgpkYXQgJT4lCiAgc2VsZWN0KG1hcml0YWwpICU+JQogIGJhcmNoYXJ0KC4pCmBgYAoKIyMjIEVkdWNhdGlvbgpgYGB7cn0KZGF0ICU+JQogIG11dGF0ZShlZHUgPSByZWNvZGVfZmFjdG9yKGVkdSwgYDFgID0gImhpZ2ggc2Nob29sLCBHRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICJhc3NvY2lhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiY29sbGVnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDRgID0gIm1hc3RlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICJkb2N0b3JhbCIsIC5vcmRlcmVkID0gVFJVRSkpICU+JQogIHNlbGVjdChlZHUpICU+JQogIGdyb3VwX2J5KGVkdSkgJT4lCiAgdGFsbHkoKQoKZGF0ICU+JQogICAgbXV0YXRlKGVkdSA9IHJlY29kZV9mYWN0b3IoZWR1LCBgMWAgPSAiaGlnaCBzY2hvb2wsIEdFRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDJgID0gImFzc29jaWF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzYCA9ICJjb2xsZWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAibWFzdGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDVgID0gImRvY3RvcmFsIiwgLm9yZGVyZWQgPSBUUlVFKSkgJT4lCiAgc2VsZWN0KGVkdSkgJT4lCiAgYmFyY2hhcnQoLikKICAKYGBgCgoqKioqCgojIyBDb25zdHJ1Y3RzIG9mIEludGVyZXN0IAoqKioqCgojIyMgSFIgQXR0cmlidXRpb25zCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KGV4cGxvaXRhdHQ6d2JhdHQpICU+JQogIHBzeWNoOjpkZXNjcmliZSguKQpgYGAKCiMjIyBCTE0sIFNPRSwgT3JnIERlaHVtYW5pemF0aW9uIGFuZCBQT1MKYGBge3J9CmRhdCAlPiUKICBzZWxlY3Qoc2JsbTpwb3MpICU+JQogIHBzeWNoOjpkZXNjcmliZSguKQpgYGAKCiMjIyBPdXRjb21lIFZhcmlhYmxlcwpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChqb2JzYXQ6Y3diKSAlPiUKICBwc3ljaDo6ZGVzY3JpYmUoLikKYGBgCgoqKioqCgpOb3Rld29ydGh5IG9ic2VydmF0aW9uczoKCiogRXhwbG9pdGF0aW9uIGF0dHJpYnV0aW9ucywgQkxNLCBhbmQgb3JnIGRlaHVtYW5pemF0aW9uIHBlcmNlcHRpb25zIGJlbG93IHNjYWxlIG1pZHBvaW50CgoqIFNhbXBsZSBhcHBlYXJzIHRvIGluY2x1ZGUgbW9zdGx5IGluZGl2aWR1YWxzIHdpdGggcG9zaXRpdmUgam9iIGF0dGl0dWRlcyBhbmQgbG93IG9uIG5lZ2F0aXZlIHByZWRpY3RvcnMKCioqKioKCiMgIEJhciBHcmFwaHMgYW5kIEhpc3RvZ3JhbXMKCiMjIEV4cGxvaXRhdGlvbiBBdHRyaWJ1dGlvbnMKYGBge3J9Cmhpc3RvZ3JhbShkYXQkZXhwbG9pdGF0dCwgdHlwZSA9ICJjb3VudCIsIGJyZWFrcyA9IGMoMC41OjcuNSkpCmBgYAoKYGBge3J9CnFxbm9ybShkYXQkZXhwbG9pdGF0dCkKcXFsaW5lKGRhdCRleHBsb2l0YXR0KQpgYGAKCmBgYHtyfQpzaGFwaXJvLnRlc3QoZGF0JGV4cGxvaXRhdHQpCmBgYAoKRGF0YSBhcHBlYXIgdG8gYmUgcG9zaXRpdmVseSBza2V3ZWQuCgojIyBXZWxsLWJlaW5nIEF0dHJpYnV0aW9ucwpgYGB7cn0KaGlzdG9ncmFtKGRhdCR3YmF0dCwgdHlwZSA9ICJjb3VudCIsIGJyZWFrcyA9IGMoMC41OjcuNSkpCmBgYAoKYGBge3J9CnFxbm9ybShkYXQkd2JhdHQpCnFxbGluZShkYXQkd2JhdHQpCmBgYAoKYGBge3J9CnNoYXBpcm8udGVzdChkYXQkd2JhdHQpCmBgYAoKTmVnYXRpdmVseSBza2V3ZWQuCgojIyBCTE0KYGBge3J9Cmhpc3RvZ3JhbShkYXQkc2JsbSwgdHlwZSA9ICJjb3VudCIsIGJyZWFrcyA9IGMoMC41OjcuNSkpCmBgYAoKYGBge3J9CnFxbm9ybShkYXQkc2JsbSkKcXFsaW5lKGRhdCRzYmxtKQpgYGAKCmBgYHtyfQpzaGFwaXJvLnRlc3QoZGF0JHNibG0pCmBgYAoKUG9zaXRpdmVseSBza2V3ZWQuCgojIyBTT0UKYGBge3J9Cmhpc3RvZ3JhbShkYXQkc29lLCB0eXBlID0gImNvdW50IiwgYnJlYWtzID0gYygwLjU6Ny41KSkKYGBgCgpgYGB7cn0KcXFub3JtKGRhdCRzb2UpCnFxbGluZShkYXQkc29lKQpgYGAKCmBgYHtyfQpzaGFwaXJvLnRlc3QoZGF0JHNvZSkKYGBgCgpOZWdhdGl2ZSBza2V3LgoKIyMgT3JnIERlaHVtYW5pemF0aW9uCmBgYHtyfQpoaXN0b2dyYW0oZGF0JG9yZ2RlaHVtLCB0eXBlID0gImNvdW50IiwgYnJlYWtzID0gYygwLjU6Ny41KSkKYGBgCgpgYGB7cn0KcXFub3JtKGRhdCRvcmdkZWh1bSkKcXFsaW5lKGRhdCRvcmdkZWh1bSkKYGBgCgpgYGB7cn0Kc2hhcGlyby50ZXN0KGRhdCRvcmdkZWh1bSkKYGBgCgpQb3NpdGl2ZSBza2V3LgoKKioqKiBOb3RlOiBWYXJpYWJsZXMgb2YgaW50ZXJlc3QgYXBwZWFyIHRvIGJlIG5vbi1ub3JtYWwsIHdoaWNoIHZpb2xhdGVzIHRoZSBhc3N1bXB0aW9ucyBmb3IgYSBzaWduaWZpY2FuY2UgdGVzdCBmb3IgY29ycmVsYXRpb25zIGludm9sdmluZyB0aGUgdmFyaWFibGVzLgoKKioqKgoKIyBTY2F0dGVycGxvdCBNYXRyaXgKCiMjIEFudGVjZWRlbnRzIGFuZCBPcmcgRGVodW1hbml6YXRpb24KYGBge3J9CmxpYnJhcnkoY2FyKQpkYXQgJT4lCiAgc2VsZWN0KGV4cGxvaXRhdHQsIHdiYXR0LCBzYmxtLCBzb2UsIG9yZ2RlaHVtKSAlPiUKICBzY2F0dGVycGxvdE1hdHJpeCguKQpgYGAKCiMjIE9yZyBEZWh1bWFuaXphdGlvbiBhbmQgQXR0aXR1ZGVzCmBgYHtyfQpkYXQgJT4lCiAgc2VsZWN0KG9yZ2RlaHVtLCBqb2JzYXQsIGFjb21taXQsIHRvaW50ZW50KSAlPiUKICBzY2F0dGVycGxvdE1hdHJpeCguKQpgYGAKCiMjIE9yZyBEZWh1bWFuaXphdGlvbiBhbmQgQnVybm91dApgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChvcmdkZWh1bSwgZGlzZW5nLCBleGhhdXN0LCBidXJub3V0KSAlPiUKICBzY2F0dGVycGxvdE1hdHJpeCguKQpgYGAKCiMjIE9yZyBEZWh1bWFuaXphdGlvbiBhbmQgUGVyZm9ybWFuY2UKYGBge3J9CmRhdCAlPiUKICBzZWxlY3Qob3JnZGVodW0sIHBlcmYsIG9jYiwgY3diKSAlPiUKICBzY2F0dGVycGxvdE1hdHJpeCguKQpgYGAKCioqKioKCiMgUHJpbWFyeSBBbmFseXNlcwoKKioqKgoKTG9hZCBhZGRpdGlvbmFsIGxpYnJhcmllcyBhbmQgc2V0IGRlZmF1bHQgcm91bmRpbmcgdmFsdWUgYW5kIGdyYXBoIHRoZW1lLgoKYGBge3IsIG1lc3NhZ2UgPSBGQUxTRX0KbGlicmFyeShlZmZlY3RzKQpsaWJyYXJ5KGxhdHRpY2UpCmxpYnJhcnkoSG1pc2MpCmxpYnJhcnkoeHRhYmxlKQoKb3B0aW9ucyhkaWdpdHMgPSA0KQoKdGhlbWVfc2V0KHRoZW1lX2NsYXNzaWMoKSkKYGBgCgoqKioqCgojIyBNZWFucyBhbmQgU3RhbmRhcmQgRGV2aWF0aW9ucwpgYGB7cn0KZGF0ICU+JQogIHNlbGVjdChvcmdkZWh1bSwgZXhwbG9pdGF0dCwgd2JhdHQsIHNibG0sIHNvZSwgam9ic2F0LCBhY29tbWl0LCBidXJub3V0LCB0b2ludGVudCwgcGVyZiwgb2NiLCBjd2IsIHNlbGVjdGlvbiwgdHJhaW5pbmcsIGFwcHJhaXNhbCwgY29tcGVuc2F0aW9uLCBocnByYWN0aWNlcywgb3JndHlwZSwgb3Jnc2l6ZSwgb3JnbGV2ZWxzLCBvcmdjZW50LCBnZW5kZXIsIGFnZSwgcmFjZW51bSwgZW5nbGlzaCwgZWR1LCBzdGF0dXMsIG9yZ3RlbnVyZSwgcG9zdGVudXJlLCBzdXB0ZW51cmUsIGRpcnJlcG9ydCwgd2Vla2hvdXJzLCBzYWxhcnkpICU+JQogIHBzeWNoOjpkZXNjcmliZSguKQpgYGAKCioqKioKCiMjIFBlYXJzb24gQ29ycmVsYXRpb25zCmBgYHtyfQpzb3VyY2UoImNvcnN0YXJzLlIiKQoKZGF0ICU+JQogIHNlbGVjdChvcmdkZWh1bSwgZXhwbG9pdGF0dCwgd2JhdHQsIHNibG0sIHNvZSwgam9ic2F0LCBhY29tbWl0LCBidXJub3V0LCB0b2ludGVudCwgcGVyZiwgb2NiLCBjd2IsIHNlbGVjdGlvbiwgdHJhaW5pbmcsIGFwcHJhaXNhbCwgY29tcGVuc2F0aW9uLCBocnByYWN0aWNlcywgb3JndHlwZSwgb3Jnc2l6ZSwgb3JnbGV2ZWxzLCBvcmdjZW50LCBnZW5kZXIsIGFnZSwgcmFjZW51bSwgZW5nbGlzaCwgZWR1LCBzdGF0dXMsIG9yZ3RlbnVyZSwgcG9zdGVudXJlLCBzdXB0ZW51cmUsIGRpcnJlcG9ydCwgd2Vla2hvdXJzLCBzYWxhcnkpICU+JQogIGFzLm1hdHJpeCguKSAlPiUKICBjb3JzdGFycyguLCBtZXRob2QgPSAicGVhcnNvbiIpCgpgYGAKCk5vdGU6IFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBtZWFzdXJlZCBvbiBhbiBvcmRpbmFsIHNjYWxlOgoKKiBPcmcgc2l6ZQoKKiBPcmcgbGV2ZWxzCgoqIE9yZyBjZW50cmFsaXR5CgoqIFNhbGFyeQoKKiBBZ2UKCiogRWR1Y2F0aW9uCgpVc2UgU3BlYXJtYW4ncyByaG8gZm9yIHRoZXNlIHZhcmlhYmxlcy4KCioqKioKCiMjIFNwZWFybWFuIENvcnJlbGF0aW9ucyBmb3IgT3JkaW5hbCBEZW1vZ3JhcGhpYyBWYXJpYWJsZXMKYGBge3J9CnNvdXJjZSgiY29yc3RhcnMuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KG9yZ2RlaHVtLCBleHBsb2l0YXR0LCB3YmF0dCwgc2JsbSwgc29lLCBqb2JzYXQsIGFjb21taXQsIGJ1cm5vdXQsIHRvaW50ZW50LCBwZXJmLCBvY2IsIGN3Yiwgc2VsZWN0aW9uLCB0cmFpbmluZywgYXBwcmFpc2FsLCBjb21wZW5zYXRpb24sIGhycHJhY3RpY2VzLCBvcmd0eXBlLCBvcmdzaXplLCBvcmdsZXZlbHMsIG9yZ2NlbnQsIGdlbmRlciwgYWdlLCByYWNlbnVtLCBlbmdsaXNoLCBlZHUsIHN0YXR1cywgb3JndGVudXJlLCBwb3N0ZW51cmUsIHN1cHRlbnVyZSwgZGlycmVwb3J0LCB3ZWVraG91cnMsIHNhbGFyeSkgJT4lCiAgYXMubWF0cml4KC4pICU+JQogIGNvcnN0YXJzKC4sIG1ldGhvZCA9ICJzcGVhcm1hbiIpCmBgYAoKU2V2ZXJhbCBpbnRlcmVzdGluZyBvYnNlcnZhdGlvbnM6CgoqIEZvci1wcm9maXQgb3JnYW5pemF0aW9ucyBzaWduaWZpY2FudGx5IHJlbGF0ZWQgdG8gaGlnaGVyIGV4cGxvaXRhdGlvbiBIUiBhdHRyaWJ1dGlvbnMsIEJMTSwgYW5kIG9yZyBkZWh1bWFuaXphdGlvbi4KCiogT3JnIHNpemUgcG9zaXRpdmVseSByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIEhSIGF0dHJpYnV0aW9ucyAmIE9DQiBhbmQgbmVnYXRpdmVseSByZWxhdGVkIHRvIEJMTS4KCiogT3JnIGxldmVscyBwb3NpdGl2bGV5IHJlbGF0ZWQgdG8gZXhwbG9pdGF0aW9uICYgY29zdCBIUiBhdHRyaWJ1dGlvbnMgYW5kIG5lZ2F0aXZlbHkgcmVsYXRlZCB0byBTT0UgJiBQT1MuIEFsc28gcG9zaXRpdmVseSByZWxhdGVkIHRvIGJvdGggT0NCcyBhbmQgQ1dCcy4KCiogU2FsYXJ5IG5lZ2F0aXZlbHkgcmVsYXRlZCB0byBleHBsb2l0YXRpb24gJiBjb3N0IEhSIGF0dHJpYnV0aW9ucywgQkxNICwgJiBvcmcgZGVodW1hbml6YXRpb24gYW5kIHBvc2l0aXZsZXkgcmVsYXRlZCB0byB3ZWxsLWJlaW5nIGF0dHJpYnV0aW9ucyBhbmQgUE9TLgoKKiBCZWluZyByZXNwb25zaWJsZSBmb3IgZGlyZWN0IHJlcG9ydHMgcG9zaXRpdmVseSByZWxhdGVkIHRvIHdlbGwtYmVpbmcgSFIgYXR0cmlidXRpb25zIGFuZCBuZWdhdGl2ZWx5IHJlbGF0ZWQgdG8gb3JnIGRlaHVtYW5pemF0aW9uLgoKKiBUZW51cmUgdmFyaWFibGVzIGFuZCB3ZWVrbHkgaG91cnMgbm90IHJlbGF0ZWQgdG8gdmFyaWFibGVzIG9mIGludGVyZXN0LgoKKiBTdGF0dXMsIGdlbmRlciwgYW5kIGFnZSBub3QgcmVsYXRlZCB0byB2YXJpYWJsZXMgb2YgaW50ZXJlc3QuCgoqKioqCgojIEh5cG90aGVzaXMgVGVzdHMKCioqKioKCiMjIEh5cG90aGVzaXMgMQoKPiBFbXBsb3llZSBIUiBhdHRyaWJ1dGlvbnMgYXJlIHJlbGF0ZWQgdG8gZW1wbG95ZWUgcGVyY2VwdGlvbnMgb2Ygb3JnYW5pemF0aW9uYWwgZGVodW1hbml6YXRpb24uIFNwZWNpZmljYWxseSwgKGEpIGVtcGxveWVlcyB3aG8gdGVuZCB0byBtYWtlIGVtcGxveWVlLWNlbnRyaWMgYXR0cmlidXRpb25zIHBlcmNlaXZlIGxvdyBsZXZlbHMgb2YgZGVodW1hbml6YXRpb24gd2hlcmVhcyAoYikgZW1wbG95ZWVzIHdobyB0ZW5kIHRvIG1ha2Ugb3JnYW5pemF0aW9uY2VudHJpYyBhdHRyaWJ1dGlvbnMgcGVyY2VpdmUgaGlnaCBsZXZlbHMgb2YgZGVodW1hbml6YXRpb24uCgpgYGB7cn0KY29yLnRlc3QoZGF0JHdiYXR0LCBkYXQkb3JnZGVodW0sIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JGV4cGxvaXRhdHQsIGRhdCRvcmdkZWh1bSwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKCkh5cG90aGVzaXMgMSBpcyBzdXBwb3J0ZWQuCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IHdiYXR0LCB5ID0gb3JnZGVodW0pKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIkVtcGxveWVlLWNlbnRyaWMgSFIgQXR0cmlidXRpb25zIiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YWl0b25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IGV4cGxvaXRhdHQsIHkgPSBvcmdkZWh1bSkpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKwogIHNjYWxlX3hfY29udGludW91cygiT3JnYW5pemF0aW9uLWNlbnRyaWMgSFIgQXR0cmlidXRpb25zIiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YWl0b25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpTaW5jZSBwcmV2aW91cyBkYXRhIGV4cGxvcmF0aW9uIHJldmVhbGVkIHRoYXQgdmFyaWFibGVzIG9mIGludGVyZXN0IGFyZSBub24tbm9ybWFsbHkgZGlzdHJpYnV0ZWQsIGNvbmR1Y3QgdHdvIGFkZGl0aW9uYWwgdGVzdHMgdG8gYWZmaXJtIHJlc3VsdHM6CgoqIEtlbmRhbGwncyB0YXUtYgoKKiBWaXN1YWwgaW5zcGVjdGlvbiBvZiByZWdyZXNzaW9uIGRpYWdub3N0aWMgcGxvdHMKCmBgYHtyfQpjb3IudGVzdChkYXQkd2JhdHQsIGRhdCRvcmdkZWh1bSwgbWV0aG9kID0gImtlbmRhbGwiKQpjb3IudGVzdChkYXQkZXhwbG9pdGF0dCwgZGF0JG9yZ2RlaHVtLCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKYGBge3J9CnBsb3QobG0ob3JnZGVodW0gfiBleHBsb2l0YXR0LCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0KcGxvdChsbShvcmdkZWh1bSB+IHdiYXR0LCBkYXRhID0gZGF0KSkKYGBgCgpLZW5kYWxsJ3MgdGF1IGFsaWducyB3aXRoIFBlYXJzb24ncyByIGFuZCBubyBzaWduaWZpY2FudCBhYm5vcm1hbGl0aWVzIHNwb3R0ZWQgaW4gdGhlIGRpYWdub3N0aWMgcGxvdHMuCgpQbG90IDEgKFJlc2lkYXVzbCB2cyBGaXR0ZWQpIGV4YW1pbmVzIGxpbmVhcml0eS4KClBsb3QgMiAoTm9ybWFsIFEtUSkgZXhhbWluZXMgbm9ybWFsaXR5IG9mIHJlc2lkdWFscy4KClBsb3QgMyAoU2NhbGUtTG9jYXRpb24pIGV4YW1pbmVzIGhldGVyc2NlZGFzdGljaXR5LgoKUGxvdCA0IChSZXNpZHVhbHMgdnMgTGV2ZXJhZ2UpIGV4YW1pbmVzIENvb2sncyBkaXN0YW5jZS4KCgoqKioqCgojIyBIeXBvdGhlc2lzIDIKCj4gU3VwZXJ2aXNvciBib3R0b20tbGluZSBtZW50YWxpdHkgaXMgcG9zaXRpdmVseSByZWxhdGVkIHRvIGVtcGxveWVlIHBlcmNlcHRpb25zIG9mIG9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uLgoKYGBge3J9CmNvci50ZXN0KGRhdCRzYmxtLCBkYXQkb3JnZGVodW0sIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpIeXBvdGhlc2lzIDIgaXMgc3VwcG9ydGVkLiAKCmBgYHtyfQpkYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2JsbSwgeSA9IG9yZ2RlaHVtKSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJTdXBlcnZpc29yJ3MgQm90dG9tLWxpbmUgTWVudGFsaXR5IiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YWl0b25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JHNibG0sIGRhdCRvcmdkZWh1bSwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKG9yZ2RlaHVtIH4gc2JsbSwgZGF0YSA9IGRhdCkpCmBgYAoKKioqKgoKIyMgSHlwb3RoZXNpcyAzCgo+IFN1cGVydmlzb3IgYm90dG9tLWxpbmUgbWVudGFsaXR5IGlzIHJlbGF0ZWQgdG8gSFIgYXR0cmlidXRpb25zIHN1Y2ggdGhhdCAoYSkgZW1wbG95ZWVzIHdpdGggaGlnaCBCTE0gc3VwZXJ2aXNvcnMgYXJlIG1vcmUgbGlrZWx5IHRvIGZvcm0gb3JnYW5pemF0aW9uLWNlbnRyaWMgYXR0cmlidXRpb25zIGFuZCAoYikgZW1wbG95ZWVzIHdpdGggbG93IEJMTSBzdXBlcnZpc29ycyBhcmUgbW9yZSBsaWtlbHkgdG8gZm9ybSBlbXBsb3llZS1jZW50cmljIGF0dHJpYnV0aW9ucy4KCmBgYHtyfQpjb3IudGVzdChkYXQkc2JsbSwgZGF0JGV4cGxvaXRhdHQsIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JHNibG0sIGRhdCR3YmF0dCwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKCkh5cG90aGVzaXMgMyBpcyBzdXBwb3J0ZWQuCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IHNibG0sIHkgPSBleHBsb2l0YXR0KSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJTdXBlcnZpc29yJ3MgQm90dG9tLWxpbmUgTWVudGFsaXR5IiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YXRpb24tY2VudHJpYyBIUiBBdHRyaWJ1dGlvbnMiLCBicmVha3MgPSBjKDE6NykpCmBgYAoKYGBge3J9CmRhdCAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzYmxtLCB5ID0gd2JhdHQpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIlN1cGVydmlzb3IncyBCb3R0b20tbGluZSBNZW50YWxpdHkiLCBicmVha3MgPSBjKDE6NykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoIkVtcGxveWVlLWNlbnRyaWMgSFIgQXR0cmlidXRpb25zIiwgYnJlYWtzID0gYygxOjcpKQpgYGAKCmBgYHtyfQpjb3IudGVzdChkYXQkc2JsbSwgZGF0JGV4cGxvaXRhdHQsIG1ldGhvZCA9ICJrZW5kYWxsIikKY29yLnRlc3QoZGF0JHNibG0sIGRhdCR3YmF0dCwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKGV4cGxvaXRhdHQgfiBzYmxtLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0KcGxvdChsbSh3YmF0dCB+IHNibG0sIGRhdGEgPSBkYXQpKQpgYGAKCioqKioKCiMjIEh5cG90aGVzaXMgNAoKPiBTdXBlcnZpc29yIGJvdHRvbS1saW5lIG1lbnRhbGl0eSBoYXMgYSBwb3NpdGl2ZSBpbmRpcmVjdCBlZmZlY3Qgb24gZW1wbG95ZWUgcGVyY2VwdGlvbnMgb2Ygb3JnYW5pemF0aW9uYWwgZGVodW1hbml6YXRpb24gdGhyb3VnaCBIUiBhdHRyaWJ1dGlvbnMuIFNwZWNpZmljYWxseSwgc3VwZXJ2aXNvciBCTE0gcmVsYXRlcyB0byBvcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiB0aHJvdWdoIGl0cyAoYSkgcG9zaXRpdmUgZWZmZWN0IG9uIG9yZ2FuaXphdGlvbmNlbnRyaWMgYXR0cmlidXRpb25zIGFuZCAoYikgbmVnYXRpdmUgZWZmZWN0IG9uIGVtcGxveWVlLWNlbnRyaWMgYXR0cmlidXRpb25zLgoKYGBge3J9CnN1bW1hcnkobG0oZXhwbG9pdGF0dCB+IHNibG0sIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KG1lZGlhdGUob3JnZGVodW0gfiBzYmxtICsgKGV4cGxvaXRhdHQpLCBkYXRhID0gZGF0LCBuLml0ZXIgPSAxMDAwMCwgemVybyA9IFRSVUUpLCBkaWdpdHMgPSA0KQpgYGAKCkNvbmZpcm1pbmcgdGhlIEYtc3RhdGlzdGljIGNhbiBiZSBjYWxjdWxhdGUgZm9yIGxhdGVyLgpgYGB7cn0KZGYxIDwtIGsgPC0gIGxlbmd0aChjKCJiIiwgImMiKSkKbiA8LSA0MDAKZGYyIDwtIG4gLSBrCnIyIDwtIC42MDI0CmZzdGF0IDwtIChyMi8oMS1yMikpKihkZjIvZGYxKQoKZGF0YS5mcmFtZSgiRi1zdGF0aXN0aWMiID0gZnN0YXQsICJkZjEiID0gZGYxLCAiZGYyIiA9IGRmMikKYGBgCgoKYGBge3J9CnN1bW1hcnkobG0od2JhdHQgfiBzYmxtLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShtZWRpYXRlKG9yZ2RlaHVtIH4gc2JsbSArICh3YmF0dCksIGRhdGEgPSBkYXQsIG4uaXRlciA9IDEwMDAwLCB6ZXJvID0gVFJVRSksIGRpZ2l0cyA9IDQpCmBgYAoKQ29uZmlybWluZyB0aGUgRi1zdGF0aXN0aWMgY2FuIGJlIGNhbGN1bGF0ZSBmb3IgbGF0ZXIuCmBgYHtyfQpkZjEgPC0gayA8LSAgbGVuZ3RoKGMoImIiLCAiYyIpKQpuIDwtIDQwMApkZjIgPC0gbiAtIGsKcjIgPC0gLjU5NzkKZnN0YXQgPC0gKHIyLygxLXIyKSkqKGRmMi9kZjEpCgpkYXRhLmZyYW1lKCJGLXN0YXRpc3RpYyIgPSBmc3RhdCwgImRmMSIgPSBkZjEsICJkZjIiID0gZGYyKQpgYGAKClNpbmNlIHRoZSBwc3ljaDo6bWVkaWF0ZSBmdW5jdGlvbiBhcHBlYXJzIHRvIG9ubHkgY2FsY3VsYXRlIHBlcmNlbnRpbGUgYm9vdHN0cmFwcyBhbmQgbm90IGJpYXMtY29ycmVjdGVkIGJvb3RzdHJhcHMsIHJlcnVuIGFuYWx5c2lzIGluIGxhdmFhbi4KCmBgYHtyfQppbmRpcmVjdC5leHBsb2l0IDwtICcKICAjIGRpcmVjdCBlZmZlY3QKICAgIG9yZ2RlaHVtIH4gYypzYmxtCiAgIyBtZWRpYXRvcgogICAgZXhwbG9pdGF0dCB+IGEqc2JsbQogICAgb3JnZGVodW0gfiBiKmV4cGxvaXRhdHQKICAjIGluZGlyZWN0IGVmZmVjdAogICAgYWIgOj0gYSpiJwoKaW5kaXJlY3QuZXhwbG9pdC5maXQgPC0gc2VtKGluZGlyZWN0LmV4cGxvaXQsIGRhdGEgPSBkYXQsIHNlID0gImJvb3QiLCBib290c3RyYXAgPSAxMDAwMCwgbWVhbnN0cnVjdHVyZSA9IFRSVUUpCnBhcmFtZXRlckVzdGltYXRlcyhpbmRpcmVjdC5leHBsb2l0LmZpdCwgYm9vdC5jaS50eXBlID0gInBlcmMiKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoaW5kaXJlY3QuZXhwbG9pdC5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKYGBgCgpgYGB7cn0Kc3VtbWFyeShpbmRpcmVjdC5leHBsb2l0LmZpdCwgc3RhbmRhcmRpemVkID0gRkFMU0UpCmBgYAoKQ2FsY3VsYXRpbmcgdGhlIEYtc3RhdGlzdGljCmBgYHtyfQpkZjEgPC0gayA8LSAgbGVuZ3RoKGMoImIiLCAiYyIpKQpuIDwtIG5vYnMoaW5kaXJlY3QuZXhwbG9pdC5maXQpCmRmMiA8LSBuIC0gawpyMiA8LSBpbnNwZWN0KGluZGlyZWN0LmV4cGxvaXQuZml0LCAicnNxdWFyZSIpW1sxXV0KZnN0YXQgPC0gKHIyLygxLXIyKSkqKGRmMi9kZjEpICMgRi1zdGF0aXN0aWMKCmRhdGEuZnJhbWUoIkYtc3RhdGlzdGljIiA9IGZzdGF0LCAiZGYxIiA9IGRmMSwgImRmMiIgPSBkZjIpCmBgYAoKYGBge3J9CmluZGlyZWN0LndiIDwtICcKICAjIGRpcmVjdCBlZmZlY3QKICAgIG9yZ2RlaHVtIH4gYypzYmxtCiAgIyBtZWRpYXRvcgogICAgd2JhdHQgfiBhKnNibG0KICAgIG9yZ2RlaHVtIH4gYip3YmF0dAogICMgaW5kaXJlY3QgZWZmZWN0CiAgICBhYiA6PSBhKmInCgppbmRpcmVjdC53Yi5maXQgPC0gc2VtKGluZGlyZWN0LndiLCBkYXRhID0gZGF0LCBzZSA9ICJib290IiwgYm9vdHN0cmFwID0gMTAwMDAsIG1lYW5zdHJ1Y3R1cmUgPSBUUlVFKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoaW5kaXJlY3Qud2IuZml0LCBib290LmNpLnR5cGUgPSAicGVyYyIpCnBhcmFtZXRlckVzdGltYXRlcyhpbmRpcmVjdC53Yi5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKYGBgCgpgYGB7cn0Kc3VtbWFyeShpbmRpcmVjdC53Yi5maXQsIHN0YW5kYXJkaXplZCA9IEZBTFNFKQpgYGAKCkNhbGN1bGF0aW5nIHRoZSBGLXN0YXRpc3RpYwpgYGB7cn0KZGYxIDwtIGsgPC0gIGxlbmd0aChjKCJiIiwgImMiKSkKbiA8LSBub2JzKGluZGlyZWN0LndiLmZpdCkKZGYyIDwtIG4gLSBrCnIyIDwtIGluc3BlY3QoaW5kaXJlY3Qud2IuZml0LCAicnNxdWFyZSIpW1sxXV0KZnN0YXQgPC0gKHIyLygxLXIyKSkqKGRmMi9kZjEpICMgRi1zdGF0aXN0aWMKCmRhdGEuZnJhbWUoIkYtc3RhdGlzdGljIiA9IGZzdGF0LCAiZGYxIiA9IGRmMSwgImRmMiIgPSBkZjIpCmBgYAoKSHlwb3RoZXNpcyA0IGlzIHN1cHBvcnRlZC4KCiMjIEh5cG90aGVzaXMgNQoKPiBTdXBlcnZpc29yIG9yZ2FuaXphdGlvbmFsIGVtYm9kaW1lbnQgbW9kZXJhdGVzIHRoZSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdXBlcnZpc29yIGJvdHRvbS1saW5lIG1lbnRhbGl0eSBhbmQgZW1wbG95ZWUgcGVyY2VwdGlvbnMgb2Ygb3JnYW5pemF0aW9uYWwgZGVodW1hbml6YXRpb24uIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1cGVydmlzb3IgQkxNIGFuZCBvcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiBzaG91bGQgYmUgbW9yZSAobGVzcykgcG9zaXRpdmUgYXQgaGlnaCAobG93KSBsZXZlbHMgb2Ygc3VwZXJ2aXNvciBvcmdhbml6YXRpb25hbCBlbWJvZGltZW50LgoKYGBge3J9CnN1bW1hcnkobG0ob3JnZGVodW0gfiBzYmxtYypzb2VjLCBkYXRhID0gZGF0KSkKYGBgCgojIyMgUGxvdCBJbnRlcmFjdGlvbiAoRmFjdG9yIFByZWRpY3RvcikKYGBge3J9Cm1vZDEgPC0gbG0ob3JnZGVodW0gfiBzYmxtYypzb2VjLCBkYXRhID0gZGF0KQppbnRlci5zZCA8LSBlZmZlY3QoYygic2JsbWMqc29lYyIpLCBtb2QxLAogICAgICAgICAgICAgICAgICAgICB4bGV2ZWxzID0gbGlzdChzYmxtYyA9IGMoLXNkKGRhdCRzYmxtYyksICtzZChkYXQkc2JsbWMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZWMgPSBjKC1zZChkYXQkc29lYyksICtzZChkYXQkc29lYykpKSkKaW50ZXIuc2QgPC0gYXMuZGF0YS5mcmFtZShpbnRlci5zZCkKCiMgQ3JlYXRlIGZhY3RvcnMgb2YgdGhlIGRpZmZlcmVudCB2YXJpYWJsZXMKaW50ZXIuc2Qkc2JsbSA8LSBmYWN0b3IoaW50ZXIuc2Qkc2JsbWMsCiAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKC1zZChkYXQkc2JsbWMpLCArc2QoZGF0JHNibG1jKSksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCItMSBTRCBTQkxNIiwgIisgMSBTRCBTQkxNIikpCiAgICAgICAgICAgICAgICAgICAgIAppbnRlci5zZCRzb2UgPC0gZmFjdG9yKGludGVyLnNkJHNvZWMsCiAgICAgICAgICAgICAgbGV2ZWxzID0gYygtc2QoZGF0JHNvZSksICtzZChkYXQkc29lYykpLAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIi0xIFNEIFNPRSIsICIrMSBTRCBTT0UiKSkKCiMgUGxvdCAKZ2dwbG90KGRhdGEgPSBpbnRlci5zZCwgYWVzKHggPSBzYmxtLCB5ID0gZml0LCBncm91cCA9IHNvZSwgc2hhcGUgPSBzb2UsIGxpbmV0eXBlID0gc29lKSkgKwogICAgICBnZW9tX3BvaW50KHNpemUgPSAzKSArIGdlb21fbGluZShzaXplID0gMSkgKwogICAgICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygiZGFzaGVkIiwgInNvbGlkIikpICsKICAgICAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTcsIDE2KSkgKwogICAgICBzY2FsZV94X2Rpc2NyZXRlKCJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IikgKwogICAgICBzY2FsZV95X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIiwgbGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgICAgIGd1aWRlcyhzaGFwZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZSA9IE5VTEwsIHJldmVyc2UgPSBUUlVFLCBrZXl3aWR0aCA9IDUpLAogICAgICAgICAgICAgbGluZXR5cGUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSBOVUxMLCByZXZlcnNlID0gVFJVRSwga2V5d2lkdGggPSA1KSkgKwogICAgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpCmBgYAoKIyMjIFBsb3QgSW50ZXJhY3Rpb24gKENvbnRpbnVvdXMgUHJlZGljdG9yKQpgYGB7cn0Kcm0obW9kMSkKcm0oaW50ZXIuc2QpCgptb2QxIDwtIGxtKG9yZ2RlaHVtIH4gc2JsbSpzb2UsIGRhdGEgPSBkYXQpCmludGVyLnNkIDwtIGVmZmVjdChjKCJzYmxtKnNvZSIpLCBtb2QxLAogICAgICAgICAgICAgICAgICAgeGxldmVscyA9IGxpc3Qoc2JsbSA9IGMoMTo3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZSA9IGMobWVhbihkYXQkc29lKS1zZChkYXQkc29lKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZGF0JHNvZSkrc2QoZGF0JHNvZSkpKSkKaW50ZXIuc2QgPC0gYXMuZGF0YS5mcmFtZShpbnRlci5zZCkKCiMgQ3JlYXRlIGZhY3RvcnMgb2YgdGhlIG1vZGVyYXRvcgoKaW50ZXIuc2Qkc29lIDwtIGZhY3RvcihpbnRlci5zZCRzb2UsCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhtZWFuKGRhdCRzb2UpLXNkKGRhdCRzb2UpLCBtZWFuKGRhdCRzb2UpK3NkKGRhdCRzb2VjKSksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiLTEgU0QgU09FIiwgIisxIFNEIFNPRSIpKQoKIyBQbG90IApnZ3Bsb3QoZGF0YSA9IGludGVyLnNkLCBhZXMoeCA9IHNibG0sIHkgPSBmaXQsIGdyb3VwID0gc29lLCBsaW5ldHlwZSA9IHNvZSkpICsKICBnZW9tX2xpbmUoc2l6ZSA9IDEpICsKICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygiZGFzaGVkIiwgInNvbGlkIikpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIlN1cGVydmlzb3IncyBCb3R0b20tTGluZSBNZW50YWxpdHkiLCBsaW1pdHMgPSBjKDEsIDcpLCBicmVha3MgPSBjKDE6NykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIiwgbGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgZ3VpZGVzKHNoYXBlID0gZ3VpZGVfbGVnZW5kKHRpdGxlID0gTlVMTCwgcmV2ZXJzZSA9IFRSVUUsIGtleXdpZHRoID0gNSksCiAgICAgICAgIGxpbmV0eXBlID0gZ3VpZGVfbGVnZW5kKHRpdGxlID0gTlVMTCwgcmV2ZXJzZSA9IFRSVUUsIGtleXdpZHRoID0gNSkpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpCmBgYAoKIyMjIE9idGFpbmluZyBNU0UgZm9yIFJlcG9ydGluZwpgYGB7cn0KYyhjcm9zc3Byb2QobW9kMSRyZXNpZHVhbHMpKS9sZW5ndGgobW9kMSRyZXNpZHVhbHMpCmBgYAoKSHlwb3RoZXNpcyA1IGlzIHN1cHBvcnRlZC4KCiogTm90YWJseSwgU09FIGV4aGliaXRzIGEgbmVnYXRpdmUgbWFpbiBlZmZlY3Qgb24gb3JnYW5pemF0aW9uYWwgZGVodW1hbml6YXRpb24uCgojIyBIeXBvdGhlc2lzIDYKCj4gU3VwZXJ2aXNvcuKAmXMgb3JnYW5pemF0aW9uYWwgZW1ib2RpbWVudCBtb2RlcmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1cGVydmlzb3IgYm90dG9tLWxpbmUgbWVudGFsaXR5IGFuZCBlbXBsb3llZSBIUiBhdHRyaWJ1dGlvbnMuIFNwZWNpZmljYWxseSwgaGlnaCAobG93KSBzdXBlcnZpc29yIEJMTSBpcyBtb3JlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gb3JnYW5pemF0aW9uLWNlbnRyaWMgKGVtcGxveWVlLWNlbnRyaWMpIEhSIGF0dHJpYnV0aW9ucyBhdCBoaWdoIGxldmVscyBvZiBzdXBlcnZpc29y4oCZcyBvcmdhbml6YXRpb25hbCBlbWJvZGltZW50LgoKYGBge3J9CnN1bW1hcnkobG0oZXhwbG9pdGF0dCB+IHNibG1jKnNvZWMsIGRhdGEgPSBkYXQpKQpgYGAKCiMjIyBPcmdhbml6YXRpb24tQ2VudHJpYyBIUiBBdHRyaWJ1dGlvbnMKCiMjIyMgUGxvdCBJbnRlcmFjdGlvbiAoRmFjdG9yIFByZWRpY3RvcikKYGBge3J9CnJtKGludGVyLnNkKQoKbW9kMiA8LSBsbShleHBsb2l0YXR0IH4gc2JsbWMqc29lYywgZGF0YSA9IGRhdCkKaW50ZXIuc2QgPC0gZWZmZWN0KGMoInNibG1jKnNvZWMiKSwgbW9kMiwKICAgICAgICAgICAgICAgICAgICAgeGxldmVscyA9IGxpc3Qoc2JsbWMgPSBjKC1zZChkYXQkc2JsbWMpLCArc2QoZGF0JHNibG1jKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2VjID0gYygtc2QoZGF0JHNvZWMpLCArc2QoZGF0JHNvZWMpKSkpCmludGVyLnNkIDwtIGFzLmRhdGEuZnJhbWUoaW50ZXIuc2QpCgojIENyZWF0ZSBmYWN0b3JzIG9mIHRoZSBkaWZmZXJlbnQgdmFyaWFibGVzCmludGVyLnNkJHNibG0gPC0gZmFjdG9yKGludGVyLnNkJHNibG1jLAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygtc2QoZGF0JHNibG1jKSwgc2QoZGF0JHNibG1jKSksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCItMSBTRCBTQkxNIiwgIisgMSBTRCBTQkxNIikpCiAgICAgICAgICAgICAgICAgICAgIAppbnRlci5zZCRzb2UgPC0gZmFjdG9yKGludGVyLnNkJHNvZWMsCiAgICAgICAgICAgICAgbGV2ZWxzID0gYygtc2QoZGF0JHNvZWMpLCBzZChkYXQkc29lYykpLAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIi0xIFNEIFNPRSIsICIrMSBTRCBTT0UiKSkKCiMgUGxvdCAKZ2dwbG90KGRhdGEgPSBpbnRlci5zZCwgYWVzKHggPSBzYmxtLCB5ID0gZml0LCBncm91cCA9IHNvZSwgc2hhcGUgPSBzb2UsIGxpbmV0eXBlID0gc29lKSkgKwogICAgICBnZW9tX3BvaW50KHNpemUgPSAzKSArIGdlb21fbGluZShzaXplID0gMSkgKwogICAgICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygiZGFzaGVkIiwgInNvbGlkIikpICsKICAgICAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTcsIDE2KSkgKyAgICAgIAogICAgICBzY2FsZV94X2Rpc2NyZXRlKCJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IikgKwogICAgICBzY2FsZV95X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbi1jZW50cmljIEhSIEF0dHJpYnV0aW9ucyIsIGxpbWl0cyA9IGMoMSwgNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogICAgICBndWlkZXMoc2hhcGUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSBOVUxMLCByZXZlcnNlID0gVFJVRSwga2V5d2lkdGggPSA1KSwKICAgICAgICAgICAgIGxpbmV0eXBlID0gZ3VpZGVfbGVnZW5kKHRpdGxlID0gTlVMTCwgcmV2ZXJzZSA9IFRSVUUsIGtleXdpZHRoID0gNSkpICsKICAgICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKQpgYGAKCiMjIyMgUGxvdCBJbnRlcmFjdGlvbiAoQ29udGludW91cyBQcmVkaWN0b3IpCmBgYHtyfQpybShtb2QyKQpybShpbnRlci5zZCkKCm1vZDIgPC0gbG0oZXhwbG9pdGF0dCB+IHNibG0qc29lLCBkYXRhID0gZGF0KQppbnRlci5zZCA8LSBlZmZlY3QoYygic2JsbSpzb2UiKSwgbW9kMiwKICAgICAgICAgICAgICAgICAgIHhsZXZlbHMgPSBsaXN0KHNibG0gPSBjKDE6NyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2UgPSBjKG1lYW4oZGF0JHNvZSktc2QoZGF0JHNvZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGRhdCRzb2UpK3NkKGRhdCRzb2UpKSkpCmludGVyLnNkIDwtIGFzLmRhdGEuZnJhbWUoaW50ZXIuc2QpCgojIENyZWF0ZSBmYWN0b3JzIG9mIHRoZSBtb2RlcmF0b3IKCmludGVyLnNkJHNvZSA8LSBmYWN0b3IoaW50ZXIuc2Qkc29lLAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMobWVhbihkYXQkc29lKS1zZChkYXQkc29lKSwgbWVhbihkYXQkc29lKStzZChkYXQkc29lYykpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIi0xIFNEIFNPRSIsICIrMSBTRCBTT0UiKSkKCiMgUGxvdCAKZ2dwbG90KGRhdGEgPSBpbnRlci5zZCwgYWVzKHggPSBzYmxtLCB5ID0gZml0LCBncm91cCA9IHNvZSwgbGluZXR5cGUgPSBzb2UpKSArCiAgZ2VvbV9saW5lKHNpemUgPSAxKSArCiAgc2NhbGVfbGluZXR5cGVfbWFudWFsKHZhbHVlcyA9IGMoImRhc2hlZCIsICJzb2xpZCIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IiwgbGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YXRpb24tQ2VudHJpYyBIUiBBdHRyaWJ1dGlvbnMiLCBsaW1pdHMgPSBjKDEsIDcpLCBicmVha3MgPSBjKDE6NykpICsKICBndWlkZXMoc2hhcGUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSBOVUxMLCByZXZlcnNlID0gVFJVRSwga2V5d2lkdGggPSA1KSwKICAgICAgICAgbGluZXR5cGUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSBOVUxMLCByZXZlcnNlID0gVFJVRSwga2V5d2lkdGggPSA1KSkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkKYGBgCgojIyMjIE9idGFpbmluZyBNU0UgZm9yIFJlcG9ydGluZwpgYGB7cn0KYyhjcm9zc3Byb2QobW9kMiRyZXNpZHVhbHMpKS9sZW5ndGgobW9kMiRyZXNpZHVhbHMpCmBgYAoKIyMjIEVtcGxveWVlLUNlbnRyaWMgSFIgQXR0cmlidXRpb25zCmBgYHtyfQpzdW1tYXJ5KGxtKHdiYXR0IH4gc2JsbWMqc29lYywgZGF0YSA9IGRhdCkpCmBgYAoKIyMjIyBQbG90IEludGVyYWN0aW9uIChGYWN0b3IgUHJlZGljdG9yKQpgYGB7cn0Kcm0oaW50ZXIuc2QpCgptb2QzIDwtIGxtKHdiYXR0IH4gc2JsbWMqc29lYywgZGF0YSA9IGRhdCkKaW50ZXIuc2QgPC0gZWZmZWN0KGMoInNibG1jKnNvZWMiKSwgbW9kMywKICAgICAgICAgICAgICAgICAgICAgeGxldmVscyA9IGxpc3Qoc2JsbWMgPSBjKC1zZChkYXQkc2JsbWMpLCArc2QoZGF0JHNibG1jKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2VjID0gYygtc2QoZGF0JHNvZWMpLCArc2QoZGF0JHNvZWMpKSkpCmludGVyLnNkIDwtIGFzLmRhdGEuZnJhbWUoaW50ZXIuc2QpCgojIENyZWF0ZSBmYWN0b3JzIG9mIHRoZSBkaWZmZXJlbnQgdmFyaWFibGVzCmludGVyLnNkJHNibG0gPC0gZmFjdG9yKGludGVyLnNkJHNibG1jLAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygtc2QoZGF0JHNibG1jKSwgc2QoZGF0JHNibG1jKSksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCItMSBTRCBTQkxNIiwgIisgMSBTRCBTQkxNIikpCiAgICAgICAgICAgICAgICAgICAgIAppbnRlci5zZCRzb2UgPC0gZmFjdG9yKGludGVyLnNkJHNvZWMsCiAgICAgICAgICAgICAgbGV2ZWxzID0gYygtc2QoZGF0JHNvZWMpLCBzZChkYXQkc29lYykpLAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIi0xIFNEIFNPRSIsICIrMSBTRCBTT0UiKSkKCiMgUGxvdCAKZ2dwbG90KGRhdGEgPSBpbnRlci5zZCwgYWVzKHggPSBzYmxtLCB5ID0gZml0LCBncm91cCA9IHNvZSwgc2hhcGUgPSBzb2UsIGxpbmV0eXBlID0gc29lKSkgKwogICAgICBnZW9tX3BvaW50KHNpemUgPSAzKSArIGdlb21fbGluZShzaXplID0gMSkgKwogICAgICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygiZGFzaGVkIiwgInNvbGlkIikpICsKICAgICAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTcsIDE2KSkgKwogICAgICBzY2FsZV94X2Rpc2NyZXRlKCJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IikgKwogICAgICBzY2FsZV95X2NvbnRpbnVvdXMoIkVtcGxveWVlLWNlbnRyaWMgSFIgQXR0cmlidXRpb25zIiwgbGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgICAgIGd1aWRlcyhzaGFwZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZSA9IE5VTEwsIHJldmVyc2UgPSBUUlVFLCBrZXl3aWR0aCA9IDUpLAogICAgICAgICAgICAgbGluZXR5cGUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSBOVUxMLCByZXZlcnNlID0gVFJVRSwga2V5d2lkdGggPSA1KSkgKwogICAgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpCmBgYAoKIyMjIyBQbG90IEludGVyYWN0aW9uIChDb250aW51b3VzIFByZWRpY3RvcikKYGBge3J9CnJtKG1vZDMpCnJtKGludGVyLnNkKQoKbW9kMyA8LSBsbSh3YmF0dCB+IHNibG0qc29lLCBkYXRhID0gZGF0KQppbnRlci5zZCA8LSBlZmZlY3QoYygic2JsbSpzb2UiKSwgbW9kMywKICAgICAgICAgICAgICAgICAgIHhsZXZlbHMgPSBsaXN0KHNibG0gPSBjKDE6NyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2UgPSBjKG1lYW4oZGF0JHNvZSktc2QoZGF0JHNvZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGRhdCRzb2UpK3NkKGRhdCRzb2UpKSkpCmludGVyLnNkIDwtIGFzLmRhdGEuZnJhbWUoaW50ZXIuc2QpCgojIENyZWF0ZSBmYWN0b3JzIG9mIHRoZSBtb2RlcmF0b3IKCmludGVyLnNkJHNvZSA8LSBmYWN0b3IoaW50ZXIuc2Qkc29lLAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMobWVhbihkYXQkc29lKS1zZChkYXQkc29lKSwgbWVhbihkYXQkc29lKStzZChkYXQkc29lYykpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIi0xIFNEIFNPRSIsICIrMSBTRCBTT0UiKSkKCiMgUGxvdCAKZ2dwbG90KGRhdGEgPSBpbnRlci5zZCwgYWVzKHggPSBzYmxtLCB5ID0gZml0LCBncm91cCA9IHNvZSwgbGluZXR5cGUgPSBzb2UpKSArCiAgZ2VvbV9saW5lKHNpemUgPSAxKSArCiAgc2NhbGVfbGluZXR5cGVfbWFudWFsKHZhbHVlcyA9IGMoImRhc2hlZCIsICJzb2xpZCIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IiwgbGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJFbXBsb3llZS1DZW50cmljIEhSIEF0dHJpYnV0aW9ucyIsIGxpbWl0cyA9IGMoMSwgNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGd1aWRlcyhzaGFwZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZSA9IE5VTEwsIHJldmVyc2UgPSBUUlVFLCBrZXl3aWR0aCA9IDUpLAogICAgICAgICBsaW5ldHlwZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZSA9IE5VTEwsIHJldmVyc2UgPSBUUlVFLCBrZXl3aWR0aCA9IDUpKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKQpgYGAKCiMjIyMgT2J0YWluaW5nIE1TRSBmb3IgUmVwb3J0aW5nCmBgYHtyfQpjKGNyb3NzcHJvZChtb2QzJHJlc2lkdWFscykpL2xlbmd0aChtb2QzJHJlc2lkdWFscykKYGBgCgpIeXBvdGhlc2lzIDYgaXMgcGFydGlhbGx5IHN1cHBvcnRlZC4KCiogU3VwcG9ydGVkIGZvciBvcmdhbml6YXRpb24tY2VudHJpYyBhdHRyaWJ1dGlvbnMuCgoqIE5vdCBzdXBwb3J0ZWQgZm9yIGVtcGxveWVlLWNlbnRyaWMgYXR0cmlidXRpb25zLgoKKiBOb3RhYmx5LCBTT0UgYXBwZWFycyB0byBleGhpYml0IGEgc3Vic3RhbnRpYWwgbWFpbiBlZmZlY3QuIFNPRSBwb3NpdGl2ZWx5IGltcGFjdHMgZW1wbG95ZWUtY2VudHJpYyBhdHRyaWJ1dGlvbnMgYW5kIG5lZ2F0aXZlbHkgaW1wYWN0cyBvcmdhbml6YXRpb24tY2VudHJpYyBhdHRyaWJ1dGlvbnMuCgojIyBIeXBvdGhlc2lzIDcKCj4gU3VwZXJ2aXNvcuKAmXMgb3JnYW5pemF0aW9uYWwgZW1ib2RpbWVudCBtb2RlcmF0ZXMgdGhlIHBvc2l0aXZlIGluZGlyZWN0IGVmZmVjdCBvZiBzdXBlcnZpc29yIGJvdHRvbS1saW5lIG1lbnRhbGl0eSBvbiBlbXBsb3llZSBwZXJjZXB0aW9ucyBvZiBvcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiB0aHJvdWdoIEhSIGF0dHJpYnV0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgaW5kaXJlY3QgZWZmZWN0IG9mIHN1cGVydmlzb3IgQkxNIG9uIG9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIG1vcmUgcG9zaXRpdmUgYXQgaGlnaCBsZXZlbHMgb2Ygc3VwZXJ2aXNvcuKAmXMgb3JnYW5pemF0aW9uYWwgZW1ib2RpbWVudC4KCiMjIyBVc2luZyBwc3ljaDo6bWVkaWF0ZQoKYGBge3J9CnN1bW1hcnkobWVkaWF0ZShvcmdkZWh1bSB+IHNibG0qc29lICsgKGV4cGxvaXRhdHQpLCBkYXRhID0gZGF0LCBuLml0ZXIgPSAxMDAwMCwgemVybyA9IFRSVUUpLCBkaWdpdHMgPSA0KQpgYGAKCmBgYHtyfQpzdW1tYXJ5KG1lZGlhdGUob3JnZGVodW0gfiBzYmxtKnNvZSArICh3YmF0dCksIGRhdGEgPSBkYXQsIG4uaXRlciA9IDEwMDAwLCB6ZXJvID0gVFJVRSksIGRpZ2l0cyA9IDQpCmBgYAoKVGhlIHBzeWNoOjptZWRpYXRlIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciBhcHByb3ByaWF0ZSBmb3IgdGhpcyBhbmFseXNpcyBhcyBpdCBpbmNsdWRlcyBhbiBlc3RpbWF0ZSBvZiB0aGUgaW50ZXJhY3Rpb24gdGVybSBvbiB0aGUgb3V0Y29tZSB2YXJpYWJsZSAoYyczKS4gVGhpcyBhcHBlYXJzIHRvIGJlIGFuIGFuYWx5c2lzIGZvciBNb2RlbCA4IG9mIFByb2Nlc3MsIG5vdCBNb2RlbCA3LgoKIyMjIFVzaW5nIGxhdmFhbjo6c2VtCgpOZWVkIHRvIG1hbnVhbGx5IGNyZWF0ZSBpbnRlcmFjdGlvbiB0ZXJtIGZvciBsYXZhYW4uCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShzYmxteHNvZSA9IHNibG0qc29lKSAlPiUgIyBVbmNlbnRlcmVkCiAgbXV0YXRlKHNibG1jeHNvZWMgPSBzYmxtYypzb2VjKSAjIENlbnRlcmVkCmBgYAoKYGBge3J9CnN1bW1hcnkobG0oZXhwbG9pdGF0dCB+IHNibG1jKnNvZWMsIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpkZjEgPC0gayA8LSAgbGVuZ3RoKGMoImExIiwgImEyIiwgImEzIikpCm4gPC0gNDAwCmRmMiA8LSBuIC0gawpyMiA8LSAuMzk0CmZzdGF0IDwtIChyMi8oMS1yMikpKihkZjIvZGYxKSAjIEYtc3RhdGlzdGljCgpkYXRhLmZyYW1lKCJGLXN0YXRpc3RpYyIgPSBmc3RhdCwgImRmMSIgPSBkZjEsICJkZjIiID0gZGYyKQpgYGAKCmBgYHtyfQpjb25kaW5kaXJlY3QuZXhwbG9pdCA8LSAnCiAgIyBkaXJlY3QgZWZmZWN0CiAgICBvcmdkZWh1bSB+IGMqc2JsbWMKICAjIG1lZGlhdG9yCiAgICBleHBsb2l0YXR0IH4gYTEqc2JsbWMgKyBhMipzb2VjICsgYTMqc2JsbWN4c29lYwogICAgb3JnZGVodW0gfiBiKmV4cGxvaXRhdHQKICAjIGluZGlyZWN0IGVmZmVjdCAoaW5kZXggb2YgbW9kZXJhdGVkIG1lZGlhdGlvbikKICAgIGFiIDo9IGEzKmIKICAjIHRvdGFsIGVmZmVjdAogICAgdG90YWwgOj0gYyArIChhMSArIGEyICsgYTMpKmIKJwogICAgCmNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdCA8LSBzZW0oY29uZGluZGlyZWN0LmV4cGxvaXQsIGRhdGEgPSBkYXQsIHNlID0gImJvb3QiLCBib290c3RyYXAgPSAxMDAwMCwgbWVhbnN0cnVjdHVyZSA9IFRSVUUpCnBhcmFtZXRlckVzdGltYXRlcyhjb25kaW5kaXJlY3QuZXhwbG9pdC5maXQsIGJvb3QuY2kudHlwZSA9ICJwZXJjIikKcGFyYW1ldGVyRXN0aW1hdGVzKGNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdCwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiKQpgYGAKCmBgYHtyfQpjb25kaW5kaXJlY3QuZXhwbG9pdDIgPC0gJwogICMgZGlyZWN0IGVmZmVjdAogICAgb3JnZGVodW0gfiBjKnNibG1jCiAgIyBtZWRpYXRvcgogICAgZXhwbG9pdGF0dCB+IGExKnNibG1jICsgYTIqc29lYyArIGEzKnNibG1jeHNvZWMKICAgIG9yZ2RlaHVtIH4gYipleHBsb2l0YXR0CiAgIyBpbmRpcmVjdCBlZmZlY3QgKGluZGV4IG9mIG1vZGVyYXRlZCBtZWRpYXRpb24pCiAgICBhYiA6PSBhMypiCiAgIyB0b3RhbCBlZmZlY3QKICAgIHRvdGFsIDo9IGMgKyAoYTEgKyBhMiArIGEzKSpiCgogICMgbWVhbiBvZiBjZW50ZXJlZCBTT0UgKGZvciBzaW1wbGUgc2xvcGVzKQogICAgc29lYyB+IHNvZWMubWVhbioxCiAgIyB2YXJpYW5jZSBvZiBjZW50ZXJlZCBTT0UgKGZvciBzaW1wbGUgc2xvcGVzKQogICAgc29lYyB+fiBzb2VjLnZhcipzb2VjCiAgIyBpbmRpcmVjdCBlZmZlY3RzIGNvbmRpdGlvbmFsIG9uIG1vZGVyYXRvciAoYTEgKyBhMyphMi52YWx1ZSkqYgogICAgaW5kaXJlY3QuU0RiZWxvdyA6PSBhMSpiICsgYTMqYiooLXNxcnQoc29lYy52YXIpKQogICAgaW5kaXJlY3QubWVhbiA6PSBhMSpiICsgYTMqc29lYy5tZWFuKmIKICAgIGluZGlyZWN0LlNEYWJvdmUgOj0gYTEqYiArIGEzKmIqKHNxcnQoc29lYy52YXIpKQonCiAKY29uZGluZGlyZWN0LmV4cGxvaXQuZml0MiA8LSBzZW0oY29uZGluZGlyZWN0LmV4cGxvaXQyLCBkYXRhID0gZGF0LCBzZSA9ICJib290IiwgYm9vdHN0cmFwID0gMTAwMDAsIG1lYW5zdHJ1Y3R1cmUgPSBUUlVFKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZGluZGlyZWN0LmV4cGxvaXQuZml0MiwgYm9vdC5jaS50eXBlID0gInBlcmMiKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZGluZGlyZWN0LmV4cGxvaXQuZml0MiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeShjb25kaW5kaXJlY3QuZXhwbG9pdC5maXQsIHN0YW5kYXJkaXplZCA9IEZBTFNFKQpgYGAKCmBgYHtyfQppbnNwZWN0KGNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdCwgInJzcXVhcmUiKQpgYGAKCkNhbGN1bGF0aW5nIEYKYGBge3J9CmRmMSA8LSBrIDwtICBsZW5ndGgoYygiYiIsICJjIikpCm4gPC0gbm9icyhjb25kaW5kaXJlY3QuZXhwbG9pdC5maXQpCmRmMiA8LSBuIC0gawpyMiA8LSBpbnNwZWN0KGNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdCwgInJzcXVhcmUiKVtbMV1dCmZzdGF0IDwtIChyMi8oMS1yMikpKihkZjIvZGYxKSAjIEYtc3RhdGlzdGljCgpkYXRhLmZyYW1lKCJGLXN0YXRpc3RpYyIgPSBmc3RhdCwgImRmMSIgPSBkZjEsICJkZjIiID0gZGYyKQpgYGAKCiMjIyMgUHJvYmluZyB0aGUgQ29uZGl0aW9uYWwgSW5kaXJlY3QgRWZmZWN0CmBgYHtyfQp3IDwtIGMoLXNkKGRhdCRzb2VjKSwgMCwgK3NkKGRhdCRzb2VjKSkKYTEgPC0gY29lZihjb25kaW5kaXJlY3QuZXhwbG9pdC5maXQpW1siYTEiXV0KYTMgPC0gY29lZihjb25kaW5kaXJlY3QuZXhwbG9pdC5maXQpW1siYTMiXV0KYiA8LSBjb2VmKGNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdClbWyJiIl1dCmNvbmRpbmRpcmVjdC5wcm9iZSA8LSBkYXRhLmZyYW1lKHcsIGExLCBhMywgYikKCmNvbmRpbmRpcmVjdC5wcm9iZSAlPiUKICByb3d3aXNlKCkgJT4lCiAgbXV0YXRlKHRoZXRheG0gPSBhMSArIGEzKncpICU+JQogIG11dGF0ZShpbmRpcmVjdCA9IHRoZXRheG0qYikKYGBgCgpSZXN1bHRzIGFwcGVhciB0byBtYXRjaCB0aGUgb25lcyBhYm92ZS4KCj4gYTNiIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbmRpdGlvbmFsIGluZGlyZWN0IGVmZmVjdHMgYmV0d2VlbiBncm91cHMgb2YgcGVvcGxlIHRoYXQgZGlmZmVyIGJ5IG9uZSB1bml0IGluIHRoZSBtb2RlcmF0b3IgKEhheWVzLCAyMDE3LCBwLiA0NTMpCgpgYGB7cn0Kc3VtbWFyeShsbSh3YmF0dCB+IHNibG1jKnNvZWMsIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpjb25kaW5kaXJlY3Qud2IgPC0gJwogICMgZGlyZWN0IGVmZmVjdAogICAgb3JnZGVodW0gfiBjKnNibG1jCiAgIyBtZWRpYXRvcgogICAgd2JhdHQgfiBhMSpzYmxtYyArIGEyKnNvZWMgKyBhMypzYmxtY3hzb2VjCiAgICBvcmdkZWh1bSB+IGIqd2JhdHQKICAjIGluZGlyZWN0IGVmZmVjdCAoaW5kZXggb2YgbW9kZXJhdGVkIG1lZGlhdGlvbikKICAgIGFiIDo9IGEzKmIKICAjIHRvdGFsIGVmZmVjdAogICAgdG90YWwgOj0gYyArIChhMSArIGEyICsgYTMpKmIKJwogICAgCmNvbmRpbmRpcmVjdC53Yi5maXQgPC0gc2VtKGNvbmRpbmRpcmVjdC53YiwgZGF0YSA9IGRhdCwgc2UgPSAiYm9vdCIsIGJvb3RzdHJhcCA9IDEwMDAwLCBtZWFuc3RydWN0dXJlID0gVFJVRSkKcGFyYW1ldGVyRXN0aW1hdGVzKGNvbmRpbmRpcmVjdC53Yi5maXQsIGJvb3QuY2kudHlwZSA9ICJwZXJjIikKcGFyYW1ldGVyRXN0aW1hdGVzKGNvbmRpbmRpcmVjdC53Yi5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKYGBgCgpgYGB7cn0Kc3VtbWFyeShjb25kaW5kaXJlY3Qud2IuZml0LCBzdGFuZGFyZGl6ZWQgPSBGQUxTRSkKYGBgCgoKYGBge3J9Cmluc3BlY3QoY29uZGluZGlyZWN0LndiLmZpdCwgInJzcXVhcmUiKQpgYGAKCkNhbGN1bGF0aW5nIEYKYGBge3J9CmRmMSA8LSBrIDwtICBsZW5ndGgoYygiYiIsICJjIikpCm4gPC0gbm9icyhjb25kaW5kaXJlY3Qud2IuZml0KQpkZjIgPC0gbiAtIGsKcjIgPC0gaW5zcGVjdChjb25kaW5kaXJlY3Qud2IuZml0LCAicnNxdWFyZSIpW1sxXV0KZnN0YXQgPC0gKHIyLygxLXIyKSkqKGRmMi9kZjEpICMgRi1zdGF0aXN0aWMKCmRhdGEuZnJhbWUoIkYtc3RhdGlzdGljIiA9IGZzdGF0LCAiZGYxIiA9IGRmMSwgImRmMiIgPSBkZjIpCmBgYAoKSHlwb3RoZXNpcyA3IGlzIHBhcnRpYWxseSBzdXBwb3J0ZWQuCgoqIFN1cHBvcnRlZCBmb3Igb3JnYW5pemF0aW9uLWNlbnRyaWMgYXR0cmlidXRpb25zLiBOb3RlOiBlZmZlY3QgaXMgcXVpdGUgc21hbGwuCgoqIE5vdCBzdXBwb3J0ZWQgZm9yIGVtcGxveWVlLWNlbnRyaWMgYXR0cmlidXRpb25zLgoKIyMgSHlwb3RoZXNpcyA4Cgo+IE9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIG5lZ2F0aXZlbHkgcmVsYXRlZCB0byBqb2Igc2F0aXNmYWN0aW9uLgoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JGpvYnNhdCwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKCkh5cG90aGVzaXMgOCBpcyBzdXBwb3J0ZWQuCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IG9yZ2RlaHVtLCB5ID0gam9ic2F0KSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkgKwogIHNjYWxlX3lfY29udGludW91cygiSm9iIFNhdGlzZmFjdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JG9yZ2RlaHVtLCBkYXQkam9ic2F0LCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKYGBge3J9CnBsb3QobG0oam9ic2F0IH4gb3JnZGVodW0sIGRhdGEgPSBkYXQpKQpgYGAKCkRpYWdub3N0aWMgcGxvdHMgZ2VuZXJhbGx5IGxvb2tzIGZpbmUsIGFsdGhvdWdoIHRoZSBzY2FsZS1sb2NhdGlvbiBwbG90IGluZGljYXRlcyBzbGlnaHQgaGV0ZXJvc2NlZGFzdGljaXR5LgoKIyMgSHlwb3RoZXNpcyA5Cgo+IE9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIG5lZ2F0aXZlbHkgcmVsYXRlZCB0byBhZmZlY3RpdmUgY29tbWl0bWVudC4KCmBgYHtyfQpjb3IudGVzdChkYXQkb3JnZGVodW0sIGRhdCRhY29tbWl0LCBtZXRob2QgPSAicGVhcnNvbiIpCmBgYAoKSHlwb3RoZXNpcyA5IGlzIHN1cHBvcnRlZC4KCmBgYHtyfQpkYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JnZGVodW0sIHkgPSBhY29tbWl0KSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkgKwogIHNjYWxlX3lfY29udGludW91cygiQWZmZWN0aXZlIENvbW1pdG1lbnQiLCBicmVha3MgPSBjKDE6NykpCmBgYAoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JGFjb21taXQsIG1ldGhvZCA9ICJrZW5kYWxsIikKYGBgCgpgYGB7cn0KcGxvdChsbShhY29tbWl0IH4gb3JnZGVodW0sIGRhdGEgPSBkYXQpKQpgYGAKCgojIyBIeXBvdGhlc2lzIDEwCgo+IE9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIHBvc2l0aXZlbHkgcmVsYXRlZCB0byB0dXJub3ZlciBpbnRlbnRpb25zLgoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JHRvaW50ZW50LCBtZXRob2QgPSAicGVhcnNvbiIpCmBgYAoKSHlwb3RoZXNpcyAxMCBpcyBzdXBwb3J0ZWQuCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IG9yZ2RlaHVtLCB5ID0gdG9pbnRlbnQpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJUdXJub3ZlciBJbnRlbnRpb25zIiwgYnJlYWtzID0gYygxOjcpKQpgYGAKCmBgYHtyfQpjb3IudGVzdChkYXQkb3JnZGVodW0sIGRhdCR0b2ludGVudCwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKHRvaW50ZW50IH4gb3JnZGVodW0sIGRhdGEgPSBkYXQpKQpgYGAKCgojIyBIeXBvdGhlc2lzIDExCgo+IE9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIHBvc2l0aXZlbHkgcmVsYXRlZCB0byBidXJub3V0LgoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JGJ1cm5vdXQsIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpIeXBvdGhlc2lzIDExIGlzIHN1cHBvcnRlZC4KCmBgYHtyfQpkYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JnZGVodW0sIHkgPSBidXJub3V0KSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKCJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIsIGJyZWFrcyA9IGMoMTo3KSkgKwogIHNjYWxlX3lfY29udGludW91cygiQnVybm91dCIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JG9yZ2RlaHVtLCBkYXQkYnVybm91dCwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKGJ1cm5vdXQgfiBvcmdkZWh1bSwgZGF0YSA9IGRhdCkpCmBgYAoKIyMjIEJ1cm5vdXQgRGltZW5zaW9ucwoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JGRpc2VuZywgbWV0aG9kID0gInBlYXJzb24iKQpjb3IudGVzdChkYXQkb3JnZGVodW0sIGRhdCRleGhhdXN0LCBtZXRob2QgPSAicGVhcnNvbiIpCmBgYAoKIyMgSHlwb3RoZXNpcyAxMgoKPiBPcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiBpcyBuZWdhdGl2ZWx5IHJlbGF0ZWQgdG8gdGFzayBwZXJmb3JtYW5jZS4KCmBgYHtyfQpjb3IudGVzdChkYXQkb3JnZGVodW0sIGRhdCRwZXJmLCBtZXRob2QgPSAicGVhcnNvbiIpCmBgYAoKSHlwb3RoZXNpcyAxMiBpcyBzdXBwb3J0ZWQuCgpgYGB7cn0KZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IG9yZ2RlaHVtLCB5ID0gcGVyZikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKwogIHNjYWxlX3hfY29udGludW91cygiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iLCBicmVha3MgPSBjKDE6NykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoIlRhc2sgUGVyZm9ybWFuY2UiLCBicmVha3MgPSBjKDE6NykpCmBgYAoKSG93ZXZlciwgdGhlIHNjYXR0ZXJwbG90IGluZGljYXRlcyB0aGUgdmFyaWFibGVzIGRvIG5vdCBoYXZlIGEgYml2YXJpYXRlIG5vcm1hbCBkaXN0cmlidXRpb24uCgpgYGB7cn0KY29yLnRlc3QoZGF0JG9yZ2RlaHVtLCBkYXQkcGVyZiwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKHBlcmYgfiBvcmdkZWh1bSwgZGF0YSA9IGRhdCkpCmBgYAoKUS1RIHBsb3QgaW5kaWNhdGVzIG5vbi1ub3JtYWxpdHkgb2YgcmVzaWR1YWxzLgoKIyMgSHlwb3RoZXNpcyAxMwoKPiBPcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiBpcyBuZWdhdGl2ZWx5IHJlbGF0ZWQgdG8gb3JnYW5pemF0aW9uYWwgY2l0aXplbnNoaXAgYmVoYXZpb3JzLgoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JG9jYiwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKCkh5cG90aGVzaXMgMTMgaXMgbm90IHN1cHBvcnRlZC4KCmBgYHtyfQpkYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JnZGVodW0sIHkgPSBvY2IpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJPcmdhbml6YWl0b25hbCBDaXRpemVuc2hpcCBCZWhhdmlvcnMiLCBicmVha3MgPSBjKDE6NykpCmBgYAoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdkZWh1bSwgZGF0JG9jYiwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCmBgYHtyfQpwbG90KGxtKG9jYiB+IG9yZ2RlaHVtLCBkYXRhID0gZGF0KSkKYGBgCgojIyBIeXBvdGhlc2lzIDE0Cgo+IE9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uIGlzIHBvc2l0aXZlbHkgcmVsYXRlZCB0byBjb3VudGVycHJvZHVjdGl2ZSB3b3JrIGJlaGF2aW9ycy4KCmBgYHtyfQpjb3IudGVzdChkYXQkb3JnZGVodW0sIGRhdCRjd2IsIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpIeXBvdGhlc2lzIDE0IGlzIHN1cHBvcnRlZC4KCmBgYHtyfQpkYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JnZGVodW0sIHkgPSBjd2IpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIiwgYnJlYWtzID0gYygxOjcpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJDb3VudGVycHJvZHVjdGl2ZSBXb3JrIEJlaGF2aW9ycyIsIGJyZWFrcyA9IGMoMTo3KSkKYGBgCgpgYGB7cn0KY29yLnRlc3QoZGF0JG9yZ2RlaHVtLCBkYXQkY3diLCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKYGBge3J9CnBsb3QobG0oY3diIH4gb3JnZGVodW0sIGRhdGEgPSBkYXQpKQpgYGAKCioqKioKCiMgUmVncmVzc2lvbnMgd2l0aCBDb250cm9scwoKKiBCb2xzdGVyIGNvcnJlbGF0aW9uIHJlc3VsdHMgd2l0aCByZWdyZXNzaW9uIGFuYWx5c2VzIGluY2x1ZGluZyBjb250cm9sIHZhcmlhYmxlcwoqIEluY2x1ZGUgZGVtb2dyYXBoaWMgdmFyaWFibGVzIHRoYXQgd2VyZSBzaWduaWZpY2FudGx5IGNvcnJlbGF0ZSB3aXRoIGZvY2FsIHZhcmlhYmxlczoKICAgIC0gb3JndHlwZQogICAgLSBvcmdsZXZlbHMKICAgIC0gZWR1CiAgICAtIGRpcnJlcG9ydAogICAgLSBzYWxhcnkKICAgIAojIyBIeXBvdGhlc2lzIDEKYGBge3J9Cm1vZDEgPC0gbG0ob3JnZGVodW0gfiB3YmF0dCArIG9yZ3R5cGUgKyBvcmdsZXZlbHMgKyBlZHUgKyBkaXJyZXBvcnQgKyBzYWxhcnkgKyBocnByYWN0aWNlcywgZGF0YSA9IGRhdCkKc3VtbWFyeShtb2QxKQpgYGAKCmBgYHtyfQptb2QyIDwtIGxtKG9yZ2RlaHVtIH4gZXhwbG9pdGF0dCArIG9yZ3R5cGUgKyBvcmdsZXZlbHMgKyBlZHUgKyBkaXJyZXBvcnQgKyBzYWxhcnkgKyBocnByYWN0aWNlcywgZGF0YSA9IGRhdCkKc3VtbWFyeShtb2QyKQpgYGAKCiMjIEh5cG90aGVzaXMgMgpgYGB7cn0KbW9kMyA8LSBsbShvcmdkZWh1bSB+IHNibG0gKyBvcmd0eXBlICsgb3JnbGV2ZWxzICsgZWR1ICsgZGlycmVwb3J0ICsgc2FsYXJ5ICsgaHJwcmFjdGljZXMsIGRhdGEgPSBkYXQpCnN1bW1hcnkobW9kMykKYGBgCgojIyBIeXBvdGhlc2lzIDMKYGBge3J9Cm1vZDQgPC0gbG0oZXhwbG9pdGF0dCB+IHNibG0gKyBvcmd0eXBlICsgb3JnbGV2ZWxzICsgZWR1ICsgZGlycmVwb3J0ICsgc2FsYXJ5ICsgaHJwcmFjdGljZXMsIGRhdGEgPSBkYXQpCnN1bW1hcnkobW9kNCkKYGBgCgpgYGB7cn0KbW9kNSA8LSBsbSh3YmF0dCB+IHNibG0gKyBvcmd0eXBlICsgb3JnbGV2ZWxzICsgZWR1ICsgZGlycmVwb3J0ICsgc2FsYXJ5ICsgaHJwcmFjdGljZXMsIGRhdGEgPSBkYXQpCnN1bW1hcnkobW9kNSkKYGBgCgojIyBBbGwgUHJlZGljdG9ycwpgYGB7cn0KbW9kNiA8LSBsbShvcmdkZWh1bSB+IHNibG0gKyBleHBsb2l0YXR0ICsgd2JhdHQgKyBvcmd0eXBlICsgb3JnbGV2ZWxzICsgZWR1ICsgZGlycmVwb3J0ICsgc2FsYXJ5ICsgaHJwcmFjdGljZXMsIGRhdGEgPSBkYXQpCnN1bW1hcnkobW9kNikKYGBgCgpSZWdyZXNzaW9uIGFuYWx5c2VzIGluZGljYXRlIHRoYXQgcHJlZGljdG9ycyBvZiBpbnRlcmVzdCBwcmVkaWN0IG9yZ2FuemF0aW9uYWwgZGVodW1hbml6YXRpb24gZXZlbiBhZnRlciBjb250cm9sbGluZyBmb3IgY292YXJpYXRlcyBhbmQgZWFjaCBvdGhlci4KCioqKioKCiMgU3VwcGxlbWVudGFsIEFuYWx5c2VzOiBDRkEgb2YgQ29yZSBDb25zdHJ1Y3RzCiMjIFNpbmdsZSBGYWN0b3IKYGBge3J9CmNmYS5tb2RlbCA8LSAnCiAgIyBtZWFzdXJlbWVudCBtb2RlbAogICAgZmFjdG9yID1+IHNibG1fMSArIHNibG1fMiArIHNibG1fMyArIHNibG1fNCArIGV4cGxvaXRfMSArIGV4cGxvaXRfMiArIGV4cGxvaXRfMyArIHdiYXR0XzEgKyB3YmF0dF8yICsgd2JhdHRfMyArIG9yZ2RlaHVtXzEgKyBvcmdkZWh1bV8yICsgb3JnZGVodW1fMyArIG9yZ2RlaHVtXzQgKyBvcmdkZWh1bV81ICsgb3JnZGVodW1fNiArIG9yZ2RlaHVtXzcgKyBvcmdkZWh1bV84ICsgb3JnZGVodW1fOSArIG9yZ2RlaHVtXzEwICsgb3JnZGVodW1fMTEKJwpjZmEuZml0IDwtIGNmYShjZmEubW9kZWwsIGRhdGEgPSBkYXQpCnN1bW1hcnkoY2ZhLmZpdCwgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkKYGBgCgoqIFBvb3IgZml0CgpgYGB7cn0KbGlicmFyeShzZW1QbG90KQpzZW1QYXRocyhjZmEuZml0LCB3aGF0ID0gInBhdGhzIiwgd2hhdExhYmVscyA9ICJzdGQiKQpgYGAKCiMjIFR3byBGYWN0b3IKYGBge3J9CmNmYS5tb2RlbCA8LSAnCiAgIyBtZWFzdXJlbWVudCBtb2RlbAogICAgZmFjdG9yMSA9fiBzYmxtXzEgKyBzYmxtXzIgKyBzYmxtXzMgKyBzYmxtXzQgKyBleHBsb2l0XzEgKyBleHBsb2l0XzIgKyBleHBsb2l0XzMgKyBvcmdkZWh1bV8xICsgb3JnZGVodW1fMiArIG9yZ2RlaHVtXzMgKyBvcmdkZWh1bV80ICsgb3JnZGVodW1fNSArIG9yZ2RlaHVtXzYgKyBvcmdkZWh1bV83ICsgb3JnZGVodW1fOCArIG9yZ2RlaHVtXzkgKyBvcmdkZWh1bV8xMCArIG9yZ2RlaHVtXzExCiAgICBmYWN0b3IyID1+IHdiYXR0XzEgKyB3YmF0dF8yICsgd2JhdHRfMwonCmNmYS5maXQgPC0gY2ZhKGNmYS5tb2RlbCwgZGF0YSA9IGRhdCwgZXN0aW1hdG9yID0gIk1MUiIpCnN1bW1hcnkoY2ZhLmZpdCwgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkKYGBgCgoqIFBvb3IgZml0CgpgYGB7cn0Kc2VtUGF0aHMoY2ZhLmZpdCwgd2hhdCA9ICJwYXRocyIsIHdoYXRMYWJlbHMgPSAic3RkIikKYGBgCgojIyBGaXJzdCBPcmRlciBGYWN0b3JzCmBgYHtyfQpjZmEubW9kZWwgPC0gJwogICMgbWVhc3VyZW1lbnQgbW9kZWwKICAgIGJsbSA9fiBzYmxtXzEgKyBzYmxtXzIgKyBzYmxtXzMgKyBzYmxtXzQKICAgIGV4cGxvaXQgPX4gZXhwbG9pdF8xICsgZXhwbG9pdF8yICsgZXhwbG9pdF8zCiAgICB3YiA9fiB3YmF0dF8xICsgd2JhdHRfMiArIHdiYXR0XzMKICAgIG9kaCA9fiBvcmdkZWh1bV8xICsgb3JnZGVodW1fMiArIG9yZ2RlaHVtXzMgKyBvcmdkZWh1bV80ICsgb3JnZGVodW1fNSArIG9yZ2RlaHVtXzYgKyBvcmdkZWh1bV83ICsgb3JnZGVodW1fOCArIG9yZ2RlaHVtXzkgKyBvcmdkZWh1bV8xMCArIG9yZ2RlaHVtXzExCicKY2ZhLmZpdCA8LSBjZmEoY2ZhLm1vZGVsLCBkYXRhID0gZGF0LCBlc3RpbWF0b3IgPSAiTUxSIikKc3VtbWFyeShjZmEuZml0LCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKQpgYGAKCgpgYGB7cn0Kc2VtUGF0aHMoY2ZhLmZpdCwgd2hhdCA9ICJwYXRocyIsIHdoYXRMYWJlbHMgPSAic3RkIikKYGBgCgoqIEJldHRlciBGaXQKCioqKioKCiMgU3VwcGxlbWVudGEgQW5hbHlzZXM6IFByb2JsaW5nIHRoZSBDb25kaXRpb25hbCBJbmRpcmVjdCBFZmZlY3QKCmBgYHtyfQpsaWJyYXJ5KGxhdmFhbikKCiMgTmVlZCB0byBtYW51YWxseSBjcmVhdGUgaW50ZXJhY3Rpb24gdGVybQpkYXQgJTw+JQogIG11dGF0ZShzYmxteHNvZSA9IHNibG0qc29lKSAlPiUgIyBVbmNlbnRlcmVkCiAgbXV0YXRlKHNibG1jeHNvZWMgPSBzYmxtYypzb2VjKSAjIENlbnRlcmVkCmBgYAoKIyMgQ29uZGl0aW9uYWwgSW5kaXJlY3QgRWZmZWN0IFRocm91Z2ggRXhwbG9pdApgYGB7cn0KY29uZGluZGlyZWN0LmV4cGxvaXQgPC0gJwogICMgZGlyZWN0IGVmZmVjdAogICAgb3JnZGVodW0gfiBjKnNibG1jCiAgIyBtZWRpYXRvcgogICAgZXhwbG9pdGF0dGMgfiBhMSpzYmxtYyArIGEyKnNvZWMgKyBhMypzYmxtY3hzb2VjCiAgICBvcmdkZWh1bSB+IGIqZXhwbG9pdGF0dGMKICAjIGluZGlyZWN0IGVmZmVjdCAoaW5kZXggb2YgbW9kZXJhdGVkIG1lZGlhdGlvbikKICAgIGFiIDo9IGEzKmIKICAjIHRvdGFsIGVmZmVjdAogICAgdG90YWwgOj0gYyArIChhMSArIGEyICsgYTMpKmIKICAjIG1lYW4gb2YgY2VudGVyZWQgU09FIChmb3Igc2ltcGxlIHNsb3BlcykKICAgIHNvZWMgfiBzb2VjLm1lYW4qMQogICMgdmFyaWFuY2Ugb2YgY2VudGVyZWQgU09FIChmb3Igc2ltcGxlIHNsb3BlcykKICAgIHNvZWMgfn4gc29lYy52YXIqc29lYwogICMgaW5kaXJlY3QgZWZmZWN0cyBjb25kaXRpb25hbCBvbiBtb2RlcmF0b3IgKGExICsgYTMqYTIudmFsdWUpKmIKICAgIGluZGlyZWN0LlNEYmVsb3cgOj0gYTEqYiArIGEzKmIqLXNxcnQoc29lYy52YXIpCiAgICBpbmRpcmVjdC5tZWFuIDo9IGExKmIgKyBhMypzb2VjLm1lYW4qYgogICAgaW5kaXJlY3QuU0RhYm92ZSA6PSBhMSpiICsgYTMqYipzcXJ0KHNvZWMudmFyKQonCiAgICAKY29uZGluZGlyZWN0LmV4cGxvaXQuZml0IDwtIHNlbShjb25kaW5kaXJlY3QuZXhwbG9pdCwgZGF0YSA9IGRhdCwgc2UgPSAiYm9vdCIsIGJvb3RzdHJhcCA9IDEwMDAwKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZGluZGlyZWN0LmV4cGxvaXQuZml0LCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIpCmBgYAoKCiMjIENvbmRpdGlvbmFsIEluZGlyZWN0IEVmZmVjdCBUaHJvdWdoIFdCCmBgYHtyfQpjb25kaW5kaXJlY3Qud2IgPC0gJwogICMgZGlyZWN0IGVmZmVjdAogICAgb3JnZGVodW0gfiBjKnNibG1jCiAgIyBtZWRpYXRvcgogICAgd2JhdHRjIH4gYTEqc2JsbWMgKyBhMipzb2VjICsgYTMqc2JsbWN4c29lYwogICAgb3JnZGVodW0gfiBiKndiYXR0YwogICMgaW5kaXJlY3QgZWZmZWN0IChpbmRleCBvZiBtb2RlcmF0ZWQgbWVkaWF0aW9uKQogICAgYWIgOj0gYTMqYgogICMgdG90YWwgZWZmZWN0CiAgICB0b3RhbCA6PSBjICsgKGExICsgYTIgKyBhMykqYgogICMgbWVhbiBvZiBjZW50ZXJlZCBTT0UgKGZvciBzaW1wbGUgc2xvcGVzKQogICAgc29lYyB+IHNvZWMubWVhbioxCiAgIyB2YXJpYW5jZSBvZiBjZW50ZXJlZCBTT0UgKGZvciBzaW1wbGUgc2xvcGVzKQogICAgc29lYyB+fiBzb2VjLnZhcipzb2VjCiAgIyBpbmRpcmVjdCBlZmZlY3RzIGNvbmRpdGlvbmFsIG9uIG1vZGVyYXRvciAoYTEgKyBhMyphMi52YWx1ZSkqYgogICAgaW5kaXJlY3QuU0RiZWxvdyA6PSBhMSpiICsgYTMqYiotc3FydChzb2VjLnZhcikKICAgIGluZGlyZWN0Lm1lYW4gOj0gYTEqYiArIGEzKnNvZWMubWVhbipiCiAgICBpbmRpcmVjdC5TRGFib3ZlIDo9IGExKmIgKyBhMypiKnNxcnQoc29lYy52YXIpCicKICAgIApjb25kaW5kaXJlY3Qud2IuZml0IDwtIHNlbShjb25kaW5kaXJlY3Qud2IsIGRhdGEgPSBkYXQsIHNlID0gImJvb3QiLCBib290c3RyYXAgPSAxMDAwMCkKcGFyYW1ldGVyRXN0aW1hdGVzKGNvbmRpbmRpcmVjdC53Yi5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKYGBgCgoKIyBTdXBwbGVtZW50YWwgQW5hbHlzZXM6IFNPRSBNb2RlcmF0aW5nIERpcmVjdCBQYXRoCgpgYGB7cn0KY29uZGluZGlyZWN0LmV4cGxvaXQyIDwtICcKICAjIGRpcmVjdCBlZmZlY3QKICAgIG9yZ2RlaHVtIH4gYzEqc2JsbWMgKyBjMipzb2VjICsgYzMqc2JsbWN4c29lYwogICMgbWVkaWF0b3IKICAgIGV4cGxvaXRhdHQgfiBhMSpzYmxtYyArIGEyKnNvZWMgKyBhMypzYmxtY3hzb2VjCiAgICBvcmdkZWh1bSB+IGIqZXhwbG9pdGF0dAogICMgaW5kaXJlY3QgZWZmZWN0IChpbmRleCBvZiBtb2RlcmF0ZWQgbWVkaWF0aW9uKQogICAgYWIgOj0gYTMqYgogICMgdG90YWwgZWZmZWN0CiAgICB0b3RhbCA6PSBjMSArIGMyICsgYzMgKyAoYTEgKyBhMiArIGEzKSpiCiAgIyBtZWFuIG9mIGNlbnRlcmVkIFNPRSAoZm9yIHNpbXBsZSBzbG9wZXMpCiAgICBzb2VjIH4gc29lYy5tZWFuKjEKICAjIHZhcmlhbmNlIG9mIGNlbnRlcmVkIFNPRSAoZm9yIHNpbXBsZSBzbG9wZXMpCiAgICBzb2VjIH5+IHNvZWMudmFyKnNvZWMKICAjIGluZGlyZWN0IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9yIChhMSArIGEzKmEyLnZhbHVlKSpiCiAgICBpbmRpcmVjdC5TRGJlbG93IDo9IGExKmIgKyBhMypiKi1zcXJ0KHNvZWMudmFyKQogICAgaW5kaXJlY3QubWVhbiA6PSBhMSpiICsgYTMqc29lYy5tZWFuKmIKICAgIGluZGlyZWN0LlNEYWJvdmUgOj0gYTEqYiArIGEzKmIqc3FydChzb2VjLnZhcikKJwogICAgCmNvbmRpbmRpcmVjdC5leHBsb2l0LmZpdDIgPC0gc2VtKGNvbmRpbmRpcmVjdC5leHBsb2l0MiwgZGF0YSA9IGRhdCwgc2UgPSAiYm9vdCIsIGJvb3RzdHJhcCA9IDEwMDAwKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZGluZGlyZWN0LmV4cGxvaXQuZml0MiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiKQpgYGAKClRoZSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIHRoZSBpbmRleCBvZiBtb2RlcmF0ZWQgbWVkaWF0aW9uIChhMypiKSBkb2VzIG5vdCBjb250YWluIDAuIEFsc28sIHRoZSBkaXJlY3QgbW9kZXJhdGlvbiBlZmZlY3QgKGMzKSBhcHBlYXJzIHRvIGJlIHNpZ25pZmljYW50IGFzIHdlbGwuCgpgYGB7cn0KY29uZGluZGlyZWN0LndiMiA8LSAnCiAgIyBkaXJlY3QgZWZmZWN0CiAgICBvcmdkZWh1bSB+IGMxKnNibG1jICsgYzIqc29lYyArIGMzKnNibG1jeHNvZWMKICAjIG1lZGlhdG9yCiAgICB3YmF0dCB+IGExKnNibG1jICsgYTIqc29lYyArIGEzKnNibG1jeHNvZWMKICAgIG9yZ2RlaHVtIH4gYip3YmF0dAogICMgaW5kaXJlY3QgZWZmZWN0IChpbmRleCBvZiBtb2RlcmF0ZWQgbWVkaWF0aW9uKQogICAgYWIgOj0gYTMqYgogICMgdG90YWwgZWZmZWN0CiAgICB0b3RhbCA6PSBjMSArIGMyICsgYzMgKyAoYTEgKyBhMiArIGEzKSpiCiAgIyBtZWFuIG9mIGNlbnRlcmVkIFNPRSAoZm9yIHNpbXBsZSBzbG9wZXMpCiAgICBzb2VjIH4gc29lYy5tZWFuKjEKICAjIHZhcmlhbmNlIG9mIGNlbnRlcmVkIFNPRSAoZm9yIHNpbXBsZSBzbG9wZXMpCiAgICBzb2VjIH5+IHNvZWMudmFyKnNvZWMKICAjIGluZGlyZWN0IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9yIChhMSArIGEzKmEyLnZhbHVlKSpiCiAgICBpbmRpcmVjdC5TRGJlbG93IDo9IGExKmIgKyBhMypiKi1zcXJ0KHNvZWMudmFyKQogICAgaW5kaXJlY3QubWVhbiA6PSBhMSpiICsgYTMqc29lYy5tZWFuKmIKICAgIGluZGlyZWN0LlNEYWJvdmUgOj0gYTEqYiArIGEzKmIqc3FydChzb2VjLnZhcikKJwogICAgCmNvbmRpbmRpcmVjdC53Yi5maXQyIDwtIHNlbShjb25kaW5kaXJlY3Qud2IyLCBkYXRhID0gZGF0LCBzZSA9ICJib290IiwgYm9vdHN0cmFwID0gMTAwMDApCnBhcmFtZXRlckVzdGltYXRlcyhjb25kaW5kaXJlY3Qud2IuZml0MiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiKQpgYGAKCioqKioKCiMgU3VwcGxlbWVudGFsIEFuYWx5c2VzOiBQYXJhbGxlbCBNZWRpYXRpb24KYGBge3J9CmluZGlyZWN0LnBhcmFsbGVsIDwtICcKICAjIGRpcmVjdCBlZmZlY3QKICAgIG9yZ2RlaHVtIH4gYypzYmxtCiAgIyBtZWRpYXRvcnMKICAgIGV4cGxvaXRhdHQgfiBhMSpzYmxtCiAgICB3YmF0dCB+IGEyKnNibG0KICAgIG9yZ2RlaHVtIH4gYjEqZXhwbG9pdGF0dCArIGIyKndiYXR0CiAgIyBpbmRpcmVjdCBlZmZlY3RzCiAgICBhMWIxIDo9IGExKmIxCiAgICBhMmIyIDo9IGEyKmIyCiAgICB0b3RhbCA6PSBhMWIxICsgYTJiMgonCgppbmRpcmVjdC5wYXJhbGxlbC5maXQgPC0gc2VtKGluZGlyZWN0LnBhcmFsbGVsLCBkYXRhID0gZGF0LCBzZSA9ICJib290IiwgYm9vdHN0cmFwID0gMTAwMDAsIG1lYW5zdHJ1Y3R1cmUgPSBUUlVFKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoaW5kaXJlY3QucGFyYWxsZWwuZml0LCBib290LmNpLnR5cGUgPSAicGVyYyIpCnBhcmFtZXRlckVzdGltYXRlcyhpbmRpcmVjdC5wYXJhbGxlbC5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKc3VtbWFyeShpbmRpcmVjdC5wYXJhbGxlbC5maXQsIHN0YW5kYXJkaXplZCA9IEZBTFNFKQpgYGAKCmBgYHtyfQppbnNwZWN0KGluZGlyZWN0LnBhcmFsbGVsLmZpdCwgInJzcXVhcmUiKQpgYGAKCkNhbGN1bGF0aW5nIEYKYGBge3J9CmRmMSA8LSBrIDwtICBsZW5ndGgoYygiYjEiLCAiYjIiLCAiYyIpKQpuIDwtIG5vYnMoaW5kaXJlY3QucGFyYWxsZWwuZml0KQpkZjIgPC0gbiAtIGsKcjIgPC0gaW5zcGVjdChpbmRpcmVjdC5wYXJhbGxlbC5maXQsICJyc3F1YXJlIilbWzFdXQpmc3RhdCA8LSAocjIvKDEtcjIpKSooZGYyL2RmMSkgIyBGLXN0YXRpc3RpYwoKZGF0YS5mcmFtZSgiRi1zdGF0aXN0aWMiID0gZnN0YXQsICJkZjEiID0gZGYxLCAiZGYyIiA9IGRmMikKYGBgCgoqKioqCgojIFN1cHBsZW1lbnRhbCBBbmFseXNlczogQ29uZGl0aW9uYWwgUGFyYWxsZWwgTWVkaWF0aW9uIChhMSBtb2RlcmF0ZWQpCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShzYmxteHNvZSA9IHNibG0qc29lKSAlPiUgIyBVbmNlbnRlcmVkCiAgbXV0YXRlKHNibG1jeHNvZWMgPSBzYmxtYypzb2VjKSAjIENlbnRlcmVkCmBgYAoKCmBgYHtyfQpjb25kLnBhcmFsbGVsIDwtICcKICAjIGRpcmVjdCBlZmZlY3QKICAgIG9yZ2RlaHVtIH4gYypzYmxtYwogICMgbWVkaWF0b3JzCiAgICBleHBsb2l0YXR0IH4gYTEqc2JsbWMgKyBhMypzb2VjICsgYTQqc2JsbWN4c29lYwogICAgd2JhdHQgfiBhMipzYmxtYwogICAgb3JnZGVodW0gfiBiMSpleHBsb2l0YXR0ICsgYjIqd2JhdHQKICAjIGluZGlyZWN0IGVmZmVjdHMKICAgIGExYjEgOj0gYTEqYjEKICAgIGEyYjIgOj0gYTIqYjIKICAjIGluZGV4IG9mIG1vZGVyYXRlZCBtZWRpYXRpb24KICAgIGE0YjEgOj0gYTQqYjEKICAjIHRvdGFsIGluZGlyZWN0IGVmZmVjdAogICAgdG90YWwgOj0gYTFiMSArIGEyYjIKJwoKY29uZC5wYXJhbGxlbC5maXQgPC0gc2VtKGNvbmQucGFyYWxsZWwsIGRhdGEgPSBkYXQsIHNlID0gImJvb3QiLCBib290c3RyYXAgPSAxMDAwMCwgbWVhbnN0cnVjdHVyZSA9IFRSVUUpCmBgYAoKYGBge3J9CnBhcmFtZXRlckVzdGltYXRlcyhjb25kLnBhcmFsbGVsLmZpdCwgYm9vdC5jaS50eXBlID0gInBlcmMiKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZC5wYXJhbGxlbC5maXQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIikKc3VtbWFyeShjb25kLnBhcmFsbGVsLmZpdCwgc3RhbmRhcmRpemVkID0gRkFMU0UpCmBgYAoKYGBge3J9Cmluc3BlY3QoY29uZC5wYXJhbGxlbC5maXQsICJyc3F1YXJlIikKYGBgCgpDYWxjdWxhdGluZyBGCmBgYHtyfQpkZjEgPC0gayA8LSBsZW5ndGgoYygiYjEiLCAiYjIiLCAiYyIpKQpuIDwtIG5vYnMoY29uZC5wYXJhbGxlbC5maXQpCmRmMiA8LSBuIC0gawpyMiA8LSBpbnNwZWN0KGNvbmQucGFyYWxsZWwuZml0LCAicnNxdWFyZSIpW1sxXV0KZnN0YXQgPC0gKHIyLygxLXIyKSkqKGRmMi9kZjEpICMgRi1zdGF0aXN0aWMKCmRhdGEuZnJhbWUoIkYtc3RhdGlzdGljIiA9IGZzdGF0LCAiZGYxIiA9IGRmMSwgImRmMiIgPSBkZjIpCmBgYAoKIyMgU2ltcGxlIE1vZGVscyBmb3IgQ29lZmZpY2llbnRzCmBgYHtyfQpzdW1tYXJ5KGxtKGV4cGxvaXRhdHQgfiBzYmxtLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShsbSh3YmF0dCB+IHNibG0sIGRhdGEgPSBkYXQpKQpgYGAKCiMgU3VwcGxlbWVudGFsIEFuYWx5c2VzOiBDb25kaXRpb25hbCBQYXJhbGxlbCBNZWRpYXRpb24gKGExIGFuZCBjJyBtb2RlcmF0ZWQpCmBgYHtyfQpjb25kLnBhcmFsbGVsMiA8LSAnCiAgIyBkaXJlY3QgZWZmZWN0CiAgICBvcmdkZWh1bSB+IGMqc2JsbWMKICAjIG1lZGlhdG9ycwogICAgZXhwbG9pdGF0dCB+IGExKnNibG1jICsgYTMqc29lYyArIGE0KnNibG1jeHNvZWMKICAgIHdiYXR0IH4gYTIqc2JsbWMKICAgIG9yZ2RlaHVtIH4gYjEqZXhwbG9pdGF0dCArIGIyKndiYXR0ICsgYjMqc29lYyArIGI0KnNibG1jeHNvZWMKICAjIGluZGlyZWN0IGVmZmVjdHMKICAgIGExYjEgOj0gYTEqYjEKICAgIGEyYjIgOj0gYTIqYjIKICAjIGluZGV4IG9mIG1vZGVyYXRlZCBtZWRpYXRpb24KICAgIGE0YjEgOj0gYTQqYjEKICAjIHRvdGFsIGluZGlyZWN0IGVmZmVjdAogICAgdG90YWwgOj0gYTFiMSArIGEyYjIKJwoKY29uZC5wYXJhbGxlbC5maXQyIDwtIHNlbShjb25kLnBhcmFsbGVsMiwgZGF0YSA9IGRhdCwgc2UgPSAiYm9vdCIsIGJvb3RzdHJhcCA9IDEwMDAwLCBtZWFuc3RydWN0dXJlID0gVFJVRSkKYGBgCgpgYGB7cn0KcGFyYW1ldGVyRXN0aW1hdGVzKGNvbmQucGFyYWxsZWwuZml0MiwgYm9vdC5jaS50eXBlID0gInBlcmMiKQpwYXJhbWV0ZXJFc3RpbWF0ZXMoY29uZC5wYXJhbGxlbC5maXQyLCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIpCnN1bW1hcnkoY29uZC5wYXJhbGxlbC5maXQyLCBzdGFuZGFyZGl6ZWQgPSBGQUxTRSkKYGBgCgpgYGB7cn0KaW5zcGVjdChjb25kLnBhcmFsbGVsLmZpdDIsICJyc3F1YXJlIikKYGBgCgpDYWxjdWxhdGluZyBGCmBgYHtyfQpkZjEgPC0gayA8LSBsZW5ndGgoYygiYjEiLCAiYjIiLCAiYjMiLCAiYjQiLCAiYyIpKQpuIDwtIG5vYnMoY29uZC5wYXJhbGxlbC5maXQyKQpkZjIgPC0gbiAtIGsKcjIgPC0gaW5zcGVjdChjb25kLnBhcmFsbGVsLmZpdDIsICJyc3F1YXJlIilbWzFdXQpmc3RhdCA8LSAocjIvKDEtcjIpKSooZGYyL2RmMSkgIyBGLXN0YXRpc3RpYwoKZGF0YS5mcmFtZSgiRi1zdGF0aXN0aWMiID0gZnN0YXQsICJkZjEiID0gZGYxLCAiZGYyIiA9IGRmMikKYGBgCgoqKioqCiMgU3VwcGxlbWVudGFsIEFuYWx5c2VzOiBFeGFtaW5pbmcgSFIgUHJhY3RpY2VzCgojIyBIUiBQcmFjdGljZXMgRGVzY3JpcHRpdmVzCmBgYHtyfQpkYXQgJT4lCiAgZ3JvdXBfYnkoc2VsZWN0aW9uKSAlPiUKICB0YWxseSgpCmBgYAoKRmV3IHBlb3BsZSBleHBlcmllbmNlIG5vIHNlbGVjdGlvbiBwcmFjdGljZXMgYXQgYWxsLgoKYGBge3J9CmRhdCAlPiUKICBncm91cF9ieSh0cmFpbmluZykgJT4lCiAgdGFsbHkoKQpgYGAKCmBgYHtyfQpkYXQgJT4lCiAgZ3JvdXBfYnkoYXBwcmFpc2FsKSAlPiUKICB0YWxseSgpCmBgYAoKYGBge3J9CmRhdCAlPiUKICBncm91cF9ieShjb21wZW5zYXRpb24pICU+JQogIHRhbGx5KCkKYGBgCgpgYGB7cn0KZGF0ICU+JQogIGdyb3VwX2J5KGhycHJhY3RpY2VzKSAlPiUKICB0YWxseSgpCmBgYAoKIyMgSFIgUHJhY3RpY2VzIENvcnJlbGF0aW9ucwpgYGB7cn0Kc291cmNlKCJjb3JzdGFycy5SIikKCmRhdCAlPiUKICBzZWxlY3QoaHJwcmFjdGljZXMsIHNlbGVjdGlvbjpjb21wZW5zYXRpb24sIG9yZ2RlaHVtLCBleHBsb2l0YXR0OndiYXR0LCBzYmxtLCBvcmdkZWh1bSwgcG9zKSAlPiUKICBhcy5tYXRyaXgoLikgJT4lCiAgY29yc3RhcnMoLiwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKClN1bSBvZiBIUiBwcmFjdGljZXMgZ2VuZXJhbGx5IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gcG9zaXRpdmUgb3V0Y29tZXMuCgojIyBIUiBQcmFjdGljZSBEZXNjcmlwdGl2ZTogU3BlY2lmaWMgSXRlbXMKYGBge3J9CmRhdCAlPiUKICBzdW1tYXJpc2VfYXQodmFycyhzZWxlY3Rpb25fMTpjb21wZW5zXzMpLCBzdW0sIG5hLnJtID0gRkFMU0UpCmBgYAoKCiMjIEhSIFByYWN0aWNlIENvcnJlbGF0aW9uczogU3BlY2lmaWMgSXRlbXMKYGBge3J9CnNvdXJjZSgiY29yc3RhcnMuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KHNlbGVjdGlvbl8xOmNvbXBlbnNfMywgb3JnZGVodW0sIGV4cGxvaXRhdHQ6d2JhdHQsIHNibG0pICU+JQogIGFzLm1hdHJpeCguKSAlPiUKICBjb3JzdGFycyguLCBtZXRob2QgPSAicGVhcnNvbiIpCmBgYAoKKioqKgoKIyBTdXBwbGVtZW50YWwgQW5hbHlzZXM6IERlbW9ncmFwaGljIERpZmZlcmVuY2VzCgoqKioqCgojIyBSZWdpb24KYGBge3J9CmRhdCAlPiUKICBncm91cF9ieShyZWdpb24pICU+JQogIHRhbGx5KCkKYGBgCgoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gInJlZ2lvbiIsIG5hLnJtID0gVFJVRSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShhb3Yob3JnZGVodW0gfiByZWdpb24sIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJzYmxtIiwgZ3JvdXB2YXJzID0gInJlZ2lvbiIsIG5hLnJtID0gVFJVRSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShhb3Yoc2JsbSB+IHJlZ2lvbiwgZGF0YSA9IGRhdCkpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gImV4cGxvaXRhdHQiLCBncm91cHZhcnMgPSAicmVnaW9uIiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdihleHBsb2l0YXR0IH4gcmVnaW9uLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAid2JhdHQiLCBncm91cHZhcnMgPSAicmVnaW9uIiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdih3YmF0dCB+IHJlZ2lvbiwgZGF0YSA9IGRhdCkpCmBgYAoKTm8gc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlcyBpbiB2YXJpYWJsZXMgb2YgaW50ZXJlc3QgYWNyb3NzIHJlZ2lvbnMuCgoqKioqCgojIyBJbmR1c3RyeQpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gInNibG0iLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gImV4cGxvaXRhdHQiLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIndiYXR0IiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKQpgYGAKCk5vdGU6IFZlcnkgbG93IG4tc2l6ZSBmb3IgY2VydGFpbiBpbmR1c3RyaWVzLiBDb25zaWRlciBkcm9wcGluZyBncm91cHMuCgpTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllcyBoYXZlIE4gPCAyMDoKCmBgYHtyfQpkYXQgJT4lCiAgZ3JvdXBfYnkoaW5kdXN0cnkpICU+JQogIHNlbGVjdChpbmR1c3RyeSkgJT4lCiAgY291bnQoKSAlPiUKICBmaWx0ZXIoZnJlcSA8IDIwKQpgYGAKCiMjIyBBTk9WQSAoT3JnIERlaHVtYW5pemF0aW9uKQpUZXN0IGZvciBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZSBmaXJzdC4gVXNlIHRoZSBub24tcGFyYW1ldHJpYyBGbGlnbmVyLUtpbGxlZW4gVGVzdC4KYGBge3J9CmZsaWduZXIudGVzdChvcmdkZWh1bSB+IGluZHVzdHJ5LCBkYXRhID0gZGF0KQpmbGlnbmVyLnRlc3Qoc2JsbSB+IGluZHVzdHJ5LCBkYXRhID0gZGF0KQpmbGlnbmVyLnRlc3QoZXhwbG9pdGF0dCB+IGluZHVzdHJ5LCBkYXRhID0gZGF0KQpmbGlnbmVyLnRlc3Qod2JhdHQgfiBpbmR1c3RyeSwgZGF0YSA9IGRhdCkKYGBgCgoKYGBge3J9CnN1bW1hcnkoYW92KG9yZ2RlaHVtIH4gaW5kdXN0cnksIGRhdGEgPSBkYXQpKQpgYGAKClNpZ25pZmljYW50IG1lYW4gZGlmZmVyZW5jZSBpbiBvcmdhbml6YXRpb25hbCBkZWh1bWFuaXphdGlvbiBiZXR3ZWVuIGluZHVzdHJpZXMuCgojIyMgVHVrZXkgVGVzdCAoT3JnIERlaHVtYW5pemF0aW9uKQpgYGB7cn0KdHVrZXkub2RoaW5kdXN0cnkgPC0gdGlkeShUdWtleUhTRChhb3Yob3JnZGVodW0gfiBpbmR1c3RyeSwgZGF0YSA9IGRhdCkpKQoKdHVrZXkub2RoaW5kdXN0cnkgJT4lCiAgc2VsZWN0KC10ZXJtKSAlPiUKICBmaWx0ZXIoYWRqLnAudmFsdWUgPCAuMDUpCmBgYAoKTm9uZSBvZiB0aGUgZ3JvdXBzIGNvbXBhcmVkIGFib3ZlIGhhZCBOIDwgMjAuCgojIyMgQ3JlYXRlIGxhYmVscyB3aXRoIGNhcGl0YWxpemVkIGxldHRlcnMgZm9yIGdyYXBoaW5nCmBgYHtyfQpkYXQkaW5kdXN0cnkgPC0gYXMuZmFjdG9yKGRhdCRpbmR1c3RyeSkKYGBgCgoKIyMjIFZpc3VhbGl6YXRpb24gKE9yZyBEZWh1bWFuaXphdGlvbikKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHNlbGVjdChpbmR1c3RyeSwgb3JnZGVodW0pICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoImFydHMsIGVudGVydGFpbm1lbnQsIHJlY3JlYXRpb24iLCAiYWNjb21tb2RhdGlvbiwgZm9vZCBzZXJ2aWNlcyIpKSAlPiUKICBncm91cF9ieShpbmR1c3RyeSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpCgpkYXQgJT4lCiAgZmlsdGVyKGluZHVzdHJ5ICVpbiUgYygiYXJ0cywgZW50ZXJ0YWlubWVudCwgcmVjcmVhdGlvbiIsICJhY2NvbW1vZGF0aW9uLCBmb29kIHNlcnZpY2VzIikpICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBpbmR1c3RyeSwgeSA9IG9yZ2RlaHVtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgc2l6ZSA9IDAuNSwgd2lkdGggPSAwLjA3KSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJBY2NvbW1vZGF0aW9uLCBGb29kIFNlcnZpY2VzIiwgIkFydHMsIEVudGVydGFpbm1lbnQsIFJlY3JlYXRpb24iKSkgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgbGFicyh4ID0gIkluZHVzdHJ5IiwgeSA9ICJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KGluZHVzdHJ5LCBvcmdkZWh1bSkgJT4lCiAgZmlsdGVyKGluZHVzdHJ5ICVpbiUgYygiZmluYW5jZSwgaW5zdXJhbmNlIiwgImFjY29tbW9kYXRpb24sIGZvb2Qgc2VydmljZXMiKSkgJT4lCiAgZ3JvdXBfYnkoaW5kdXN0cnkpICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKQoKZGF0ICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoImZpbmFuY2UsIGluc3VyYW5jZSIsICJhY2NvbW1vZGF0aW9uLCBmb29kIHNlcnZpY2VzIikpICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBpbmR1c3RyeSwgeSA9IG9yZ2RlaHVtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgc2l6ZSA9IDAuNSwgd2lkdGggPSAwLjA3KSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJBY2NvbW1vZGF0aW9uLCBGb29kIFNlcnZpY2VzIiwgIkZpbmFuY2UsIEluc3VyYW5jZSIpKSArICAKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGxhYnMoeCA9ICJJbmR1c3RyeSIsIHkgPSAiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHNlbGVjdChpbmR1c3RyeSwgb3JnZGVodW0pICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoInJldGFpbCB0cmFkZSIsICJhcnRzLCBlbnRlcnRhaW5tZW50LCByZWNyZWF0aW9uIikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkKCmRhdCAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiYXJ0cywgZW50ZXJ0YWlubWVudCwgcmVjcmVhdGlvbiIpKSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gaW5kdXN0cnksIHkgPSBvcmdkZWh1bSwgZ3JvdXAgPSBpbmR1c3RyeSwgZmlsbCA9IGluZHVzdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuMykgKwogIHNjYWxlX2ZpbGxfZ3JleShzdGFydCA9IC40LCBlbmQgPSAuOCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBvcmdkZWh1bSAtIGNpLCB5bWF4ID0gb3JnZGVodW0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiQXJ0cywgRW50ZXJ0YWlubWVudCwgUmVjcmVhdGlvbiIsICJSZXRhaWwgVHJhZGUiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgbGFicyh4ID0gIkluZHVzdHJ5IiwgeSA9ICJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KGluZHVzdHJ5LCBvcmdkZWh1bSkgJT4lCiAgZmlsdGVyKGluZHVzdHJ5ICVpbiUgYygicmV0YWlsIHRyYWRlIiwgImVkdWNhdGlvbmFsIHNlcnZpY2VzIikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkKCmRhdCAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiZWR1Y2F0aW9uYWwgc2VydmljZXMiKSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IGluZHVzdHJ5LCB5ID0gb3JnZGVodW0sIGdyb3VwID0gaW5kdXN0cnksIGZpbGwgPSBpbmR1c3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjMpICsKICBzY2FsZV9maWxsX2dyZXkoc3RhcnQgPSAuNCwgZW5kID0gLjgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gb3JnZGVodW0gLSBjaSwgeW1heCA9IG9yZ2RlaHVtICsgY2kpLCBzaXplID0gMC41LCB3aWR0aCA9IDAuMDcpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkVkdWNhdGlvbmFsIFNlcnZpY2VzIiwgIlJldGFpbCBUcmFkZSIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpLCBicmVha3MgPSBjKDE6NykpICsKICBsYWJzKHggPSAiSW5kdXN0cnkiLCB5ID0gIk9yZ2FuaXphdGlvbmFsIERlaHVtYW5pemF0aW9uIikgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkgKyBndWlkZXMoZmlsbCA9IEZBTFNFKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzZWxlY3QoaW5kdXN0cnksIG9yZ2RlaHVtKSAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiZmluYW5jZSwgaW5zdXJhbmNlIikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkKCmRhdCAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiZmluYW5jZSwgaW5zdXJhbmNlIikpICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBpbmR1c3RyeSwgeSA9IG9yZ2RlaHVtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgc2l6ZSA9IDAuNSwgd2lkdGggPSAwLjA3KSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJGaW5hbmNlLCBJbnN1cmFuY2UiLCAiUmV0YWlsIFRyYWRlIikpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGxhYnMoeCA9ICJJbmR1c3RyeSIsIHkgPSAiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKIyMjIEFOT1ZBIChCTE0pCmBgYHtyfQpzdW1tYXJ5KGFvdihzYmxtIH4gaW5kdXN0cnksIGRhdGEgPSBkYXQpKQpgYGAKClNpZ25pZmljYW50IG1lYW4gZGlmZmVyZW5jZSBpbiBCTE0gYmV0d2VlbiBpbmR1c3RyaWVzLgoKIyMjIFR1a2V5IFRlc3QgKEJMTSkKYGBge3J9CnR1a2V5LnNibG1pbmR1c3RyeSA8LSB0aWR5KFR1a2V5SFNEKGFvdihzYmxtIH4gaW5kdXN0cnksIGRhdGEgPSBkYXQpKSkKCnR1a2V5LnNibG1pbmR1c3RyeSAlPiUKICBzZWxlY3QoLXRlcm0pICU+JQogIGZpbHRlcihhZGoucC52YWx1ZSA8IC4wNSkKYGBgCgojIyMgVmlzdWFsaXphdGlvbiAoQkxNKQpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KGluZHVzdHJ5LCBzYmxtKSAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJlZHVjYXRpb25hbCBzZXJ2aWNlcyIsICJhY2NvbW1vZGF0aW9uLCBmb29kIHNlcnZpY2VzIikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJzYmxtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKQoKZGF0ICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoImVkdWNhdGlvbmFsIHNlcnZpY2VzIiwgImFjY29tbW9kYXRpb24sIGZvb2Qgc2VydmljZXMiKSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gaW5kdXN0cnksIHkgPSBzYmxtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiQWNjb21tb2RhdGlvbiwgRm9vZCBTZXJ2aWNlcyIsICJFZHVjYXRpb25hbCBTZXJ2aWNlcyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpLCBicmVha3MgPSBjKDE6NykpICsKICBsYWJzKHggPSAiSW5kdXN0cnkiLCB5ID0gIlN1cGVydmlzb3IncyBCb3R0b20tTGluZSBNZW50YWxpdHkiKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHNlbGVjdChpbmR1c3RyeSwgc2JsbSkgJT4lCiAgZmlsdGVyKGluZHVzdHJ5ICVpbiUgYygiZmluYW5jZSwgaW5zdXJhbmNlIiwgImFjY29tbW9kYXRpb24sIGZvb2Qgc2VydmljZXMiKSkgJT4lCiAgZ3JvdXBfYnkoaW5kdXN0cnkpICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gInNibG0iLCBncm91cHZhcnMgPSAiaW5kdXN0cnkiLCBuYS5ybSA9IFRSVUUpCgpkYXQgJT4lCiAgZmlsdGVyKGluZHVzdHJ5ICVpbiUgYygiZmluYW5jZSwgaW5zdXJhbmNlIiwgImFjY29tbW9kYXRpb24sIGZvb2Qgc2VydmljZXMiKSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gaW5kdXN0cnksIHkgPSBzYmxtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiQWNjb21tb2RhdGlvbiwgRm9vZCBTZXJ2aWNlcyIsICJGaW5hbmNlLCBJbnN1cmFuY2UiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgbGFicyh4ID0gIkluZHVzdHJ5IiwgeSA9ICJTdXBlcnZpc29yJ3MgQm90dG9tLUxpbmUgTWVudGFsaXR5IikgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkgKyBndWlkZXMoZmlsbCA9IEZBTFNFKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzZWxlY3QoaW5kdXN0cnksIHNibG0pICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoInJldGFpbCB0cmFkZSIsICJlZHVjYXRpb25hbCBzZXJ2aWNlcyIpKSAlPiUKICBncm91cF9ieShpbmR1c3RyeSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkKCmRhdCAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiZWR1Y2F0aW9uYWwgc2VydmljZXMiKSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gaW5kdXN0cnksIHkgPSBzYmxtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiRWR1Y2F0aW9uYWwgU2VydmljZXMiLCAiUmV0YWlsIFRyYWRlIikpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGxhYnMoeCA9ICJJbmR1c3RyeSIsIHkgPSAiU3VwZXJ2aXNvcidzIEJvdHRvbS1MaW5lIE1lbnRhbGl0eSIpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc2VsZWN0KGluZHVzdHJ5LCBzYmxtKSAlPiUKICBmaWx0ZXIoaW5kdXN0cnkgJWluJSBjKCJyZXRhaWwgdHJhZGUiLCAiZmluYW5jZSwgaW5zdXJhbmNlIikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5KSAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJzYmxtIiwgZ3JvdXB2YXJzID0gImluZHVzdHJ5IiwgbmEucm0gPSBUUlVFKQoKZGF0ICU+JQogIGZpbHRlcihpbmR1c3RyeSAlaW4lIGMoInJldGFpbCB0cmFkZSIsICJmaW5hbmNlLCBpbnN1cmFuY2UiKSkgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJpbmR1c3RyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gaW5kdXN0cnksIHkgPSBzYmxtLCBncm91cCA9IGluZHVzdHJ5LCBmaWxsID0gaW5kdXN0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYygiRmluYW5jZSwgSW5zdXJhbmNlIiwgIlJldGFpbCBUcmFkZSIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpLCBicmVha3MgPSBjKDE6NykpICsKICBsYWJzKHggPSAiSW5kdXN0cnkiLCB5ID0gIlN1cGVydmlzb3IncyBCb3R0b20tTGluZSBNZW50YWxpdHkiKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKIyMjIEFOT1ZBIChIUiBBdHRyaWJ1dGlvbnMpCmBgYHtyfQpzdW1tYXJ5KGFvdihleHBsb2l0YXR0IH4gaW5kdXN0cnksIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdih3YmF0dCB+IGluZHVzdHJ5LCBkYXRhID0gZGF0KSkKYGBgCgpObyBzaWduaWZpY2FudCBtZWFuIGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0aW9ucyBhY3Jvc3MgaW5kdXN0cmllcy4gSG93ZXZlciwgcC12YWx1ZXMgbWF5IGJlIGNvbnNpZGVyZWQgIm1hcmdpbmFsIi4KCioqKioKCiMjIE1hcml0YWwgU3RhdHVzCgpgYGB7cn0KZGF0ICU+JQogIGdyb3VwX2J5KG1hcml0YWwpICU+JQogIHRhbGx5KCkKYGBgCgpgYGB7cn0KZGF0ICU+JQogIGdyb3VwX2J5KG1hcml0YWwpICU+JQogIHN1bW1hcml6ZShvcmdkZWh1bSA9IG1lYW4ob3JnZGVodW0sIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHNibG0gPSBtZWFuKHNibG0sIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIGV4cGxvaXRhdHQgPSBtZWFuKGV4cGxvaXRhdHQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHdiYXR0ID0gbWVhbih3YmF0dCwgbmEucm0gPSBUUlVFKSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShhb3Yob3JnZGVodW0gfiBtYXJpdGFsLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShhb3Yoc2JsbSB+IG1hcml0YWwsIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdihleHBsb2l0YXR0IH4gbWFyaXRhbCwgZGF0YSA9IGRhdCkpCmBgYAoKYGBge3J9CnN1bW1hcnkoYW92KHdiYXR0IH4gbWFyaXRhbCwgZGF0YSA9IGRhdCkpCmBgYAoKTm8gc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlcyBpbiB2YXJpYWJsZXMgb2YgaW50ZXJlc3QgYWNyb3NzIG1hcml0YWwgc3RhdHVzLgoKKioqKgoKIyMgUmFjZQoKYGBge3J9CmRhdCAlPiUKICBzZWxlY3QocmFjZSkgJT4lCiAgZ3JvdXBfYnkocmFjZSkgJT4lCiAgdGFsbHkoKQpgYGAKCmBgYHtyfQpkYXQgJT4lCiAgZ3JvdXBfYnkocmFjZSkgJT4lCiAgc3VtbWFyaXplKG9yZ2RlaHVtID0gbWVhbihvcmdkZWh1bSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgc2JsbSA9IG1lYW4oc2JsbSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgZXhwbG9pdGF0dCA9IG1lYW4oZXhwbG9pdGF0dCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgd2JhdHQgPSBtZWFuKHdiYXR0LCBuYS5ybSA9IFRSVUUpKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdihvcmdkZWh1bSB+IHJhY2UsIGRhdGEgPSBkYXQpKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGFvdihzYmxtIH4gcmFjZSwgZGF0YSA9IGRhdCkpCmBgYAoKYGBge3J9CnN1bW1hcnkoYW92KGV4cGxvaXRhdHQgfiByYWNlLCBkYXRhID0gZGF0KSkKYGBgCgpgYGB7cn0Kc3VtbWFyeShhb3Yod2JhdHQgfiByYWNlLCBkYXRhID0gZGF0KSkKYGBgCgpObyBzaWduaWZpY2FudCBtZWFuIGRpZmZlcmVuY2VzIGluIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCBhY3Jvc3MgcmFjZXMuIE5vdGFibHksIGhvd2V2ZXIsIEJsYWNrIGVtcGxveWVlcyBhcHBlYXIgdG8gZGlmZmVyIHNsaWdodGx5LgoKKioqKgoKIyMgT3JnIFR5cGUKCk9yZ2FuaXphdGlvbiB0eXBlIChmb3ItcHJvZml0IHZzIG5vbnByb2ZpdCkgd2FzIGNvcnJlbGF0ZWQgd2l0aCBzZXZlcmFsIHZhcmlhYmxlcyBvZiBpbnRlcmVzdC4KCiMjIyBWYXJpYWJsZSBQcmVwYXJhdGlvbgpgYGB7cn0KZGF0ICU8PiUKICBtdXRhdGUob3JndHlwZSA9IHJlY29kZV9mYWN0b3Iob3JndHlwZSwgYDFgID0gIkZvci1wcm9maXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGAwYCA9ICJOb25wcm9maXQiKSkKYGBgCgoKIyMjIE9yZ2FuaXphdGlvbiBUeXBlIGFuZCBEZWh1bWFuaXphdGlvbgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAib3JndHlwZSIsIG5hLnJtID0gVFJVRSkKYGBgCgpgYGB7cn0KdC50ZXN0KGRhdCRvcmdkZWh1bSB+IGRhdCRvcmd0eXBlKQpgYGAKCmBgYHtyfQp0LnRlc3QoZGF0JG9yZ2RlaHVtIH4gZGF0JG9yZ3R5cGUsIHZhci5lcXVhbCA9IFRSVUUpCmBgYAoKU2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gZ3JvdXBzLiBUZXN0cyBhc3N1bWluZyBlcXVhbCBhbmQgdW5lcXVhbCB2YXJpYW5jZXMgeWllbGQgc2ltaWxhciByZXN1bHRzLgoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIm9yZ2RlaHVtIiwgZ3JvdXB2YXJzID0gIm9yZ3R5cGUiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IG9yZ3R5cGUsIHkgPSBvcmdkZWh1bSwgZ3JvdXAgPSBvcmd0eXBlLCBmaWxsID0gb3JndHlwZSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjMpICsKICBzY2FsZV9maWxsX2dyZXkoc3RhcnQgPSAuNCwgZW5kID0gLjgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gb3JnZGVodW0gLSBjaSwgeW1heCA9IG9yZ2RlaHVtICsgY2kpLCBzaXplID0gMC41LCB3aWR0aCA9IDAuMDcpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGxhYnMoeCA9ICJPcmdhbml6YXRpb24gVHlwZSIsIHkgPSAiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMpKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYApOb3RlOiBFcnJvciBiYXJzIHJlZmxlY3QgY29uZmlkZW5jZSBpbnRlcnZhbHMuCgojIyMgT3JnYW5pemF0aW9uIFR5cGUgYW5kIEV4cGxvaXRhdGlvbiBBdHRyaWJ1dGlvbnMKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gImV4cGxvaXRhdHQiLCBncm91cHZhcnMgPSAib3JndHlwZSIsIG5hLnJtID0gVFJVRSkKYGBgCgoKYGBge3J9CnQudGVzdChkYXQkZXhwbG9pdGF0dCB+IGRhdCRvcmd0eXBlKQpgYGAKCmBgYHtyfQp0LnRlc3QoZGF0JGV4cGxvaXRhdHQgfiBkYXQkb3JndHlwZSwgdmFyLmVxdWFsID0gVFJVRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAiZXhwbG9pdGF0dCIsIGdyb3VwdmFycyA9ICJvcmd0eXBlIiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBvcmd0eXBlLCB5ID0gZXhwbG9pdGF0dCwgZ3JvdXAgPSBvcmd0eXBlLCBmaWxsID0gb3JndHlwZSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjMpICsKICBzY2FsZV9maWxsX2dyZXkoc3RhcnQgPSAuNCwgZW5kID0gLjgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gZXhwbG9pdGF0dCAtIGNpLCB5bWF4ID0gZXhwbG9pdGF0dCArIGNpKSwgc2l6ZSA9IDAuNSwgd2lkdGggPSAwLjA3KSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpLCBicmVha3MgPSBjKDE6NykpICsKICBsYWJzKHggPSAiT3JnYW5pemF0aW9uIFR5cGUiLCB5ID0gIk9yZ2FuaXphdGlvbi1DZW50cmljIEhSIEF0dHJpYnV0aW9ucyIpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCk5vdGU6IEVycm9yIGJhcnMgcmVmbGVjdCBjb25maWRlbmNlIGludGVydmFscy4KCiMjIyBPcmdhbml6YXRpb24gVHlwZSBhbmQgQkxNCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJzYmxtIiwgZ3JvdXB2YXJzID0gIm9yZ3R5cGUiLCBuYS5ybSA9IFRSVUUpCmBgYAoKCmBgYHtyfQp0LnRlc3QoZGF0JHNibG0gfiBkYXQkb3JndHlwZSkKYGBgCgpgYGB7cn0KdC50ZXN0KGRhdCRzYmxtIH4gZGF0JG9yZ3R5cGUsIHZhci5lcXVhbCA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gInNibG0iLCBncm91cHZhcnMgPSAib3JndHlwZSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JndHlwZSwgeSA9IHNibG0sIGdyb3VwID0gb3JndHlwZSwgZmlsbCA9IG9yZ3R5cGUpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHNpemUgPSAwLjUsIHdpZHRoID0gMC4wNykgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSwgYnJlYWtzID0gYygxOjcpKSArCiAgbGFicyh4ID0gIk9yZ2FuaXphdGlvbiBUeXBlIiwgeSA9ICJTdXBlcnZpc29yJ3MgQm90dG9tLWxpbmUgTWVudGFsaXR5IikgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkgKyBndWlkZXMoZmlsbCA9IEZBTFNFKQpgYGAKTm90ZTogRXJyb3IgYmFycyByZWZsZWN0IGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKKioqKgoKIyMgT3JnIExldmVscwoKIyMjIE9yZyBMZXZlbHMgYW5kIFZhcmlhYmxlcyBvZiBJbnRlcmVzdAoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdsZXZlbHMsIGRhdCRleHBsb2l0YXR0LCBtZXRob2QgPSAic3BlYXJtYW4iKQpgYGAKCk91dHB1dCBmb3IgU3BlYXJtYW4ncyByaG8geWllbGRzIGEgd2FybmluZyB0aGF0IGRhdGEgc2FtcGxlcyBjb250YWlucyBjb3JyZWxhdGVkIHRpZXMuIEtlbmRhbGwncyB0YXUtYiBjb2VmZmljaWVudCBjYW4gaGFuZGxlIHRpZXMgKGJlbG93KS4KCmBgYHtyfQpjb3IudGVzdChkYXQkb3JnbGV2ZWxzLCBkYXQkZXhwbG9pdGF0dCwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCgpgYGB7cn0KY29yLnRlc3QoZGF0JG9yZ2xldmVscywgZGF0JG9yZ2RlaHVtLCBtZXRob2QgPSAic3BlYXJtYW4iKQoKY29yLnRlc3QoZGF0JG9yZ2xldmVscywgZGF0JG9yZ2RlaHVtLCAgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKClNpZ25pZmljYW50IHBvc2l0aXZlIGNvcnJlbGF0aW9uIGJldHdlZW4gb3JnIGxldmVscyBhbmQgb3JnIGRlaHVtYW5pemF0aW9uLgoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdsZXZlbHMsIGRhdCRzYmxtLCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKYGBge3J9CmNvci50ZXN0KGRhdCRvcmdsZXZlbHMsIGRhdCR3YmF0dCwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKCk5vIHNpZ25pZmljYW50IHJhbmsgY29ycmVsYXRpb24gYmV0d2VlbiBvcmcgbGV2ZWxzIGFuZCBCTE0gb3Igd2VsbC1iZWluZyBhdHRyaWJ1dGlvbnMuCgojIyMgVmFyaWFibGUgUHJlcGFyYXRpb24gZm9yIFZpc3VhbGl6YXRpb24KCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShvcmdsZXZlbHMgPSByZWNvZGVfZmFjdG9yKG9yZ2xldmVscywgYDFgID0gInRocmVlIG9yIGZld2VyIGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDJgID0gImZvdXIgbGV2ZWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiZml2ZSBsZXZlbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA0YCA9ICJzaXggbGV2ZWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNWAgPSAic2V2ZW4gbGV2ZWxzIG9yIG1vcmUiLCAub3JkZXJlZCA9IFRSVUUpKQpgYGAKCiMjIyBPcmcgTGV2ZWxzIGFuZCBFeHBsb2l0YXRpb24gQXR0cmlidXRpb25zCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJleHBsb2l0YXR0IiwgZ3JvdXB2YXJzID0gIm9yZ2xldmVscyIpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gImV4cGxvaXRhdHQiLCBncm91cHZhcnMgPSAib3JnbGV2ZWxzIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gb3JnbGV2ZWxzLCB5ID0gZXhwbG9pdGF0dCwgZ3JvdXAgPSAxKSkgKyAKICAgIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBleHBsb2l0YXR0IC0gY2ksIHltYXggPSBleHBsb2l0YXR0ICsgY2kpLCB3aWR0aD0uMSkgKwogICAgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygxLDUpKSArCiAgICBsYWJzKHggPSAiTGV2ZWxzIGluIE9yZ2FuaXphdGlvbiIsIHkgPSAiRXhwbG9pdGF0aW9uIEF0dHJpYnV0aW9ucyIpICsKICAgIHRoZW1lX2NsYXNzaWMoKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKTm90ZTogRXJyb3IgYmFycyByZWZsZWN0IGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKQ29uZmlkZW5jZSBpbnRlcnZhbHMgYXBwZWFyIHRvIG92ZXJsYXAgc3Vic3RhbnRpYWxseS4KCiMjIyBPcmcgTGV2ZWxzIGFuZCBPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAib3JnbGV2ZWxzIiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAib3JnbGV2ZWxzIiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBvcmdsZXZlbHMsIHkgPSBvcmdkZWh1bSwgZ3JvdXAgPSAxKSkgKyAKICAgIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBvcmdkZWh1bSAtIGNpLCB5bWF4ID0gb3JnZGVodW0gKyBjaSksIHdpZHRoPS4xKSArCiAgICBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDEsNSkpICsKICAgIGxhYnMoeCA9ICJMZXZlbHMgaW4gT3JnYW5pemF0aW9uIiwgeSA9ICJFeHBsb2l0YXRpb24gQXR0cmlidXRpb25zIikgKwogICAgdGhlbWVfY2xhc3NpYygpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCgpOb3RlOiBFcnJvciBiYXJzIHJlZmxlY3QgY29uZmlkZW5jZSBpbnRlcnZhbHMuCgpDb25maWRlbmNlIGludGVydmFscyBhcHBlYXIgdG8gb3ZlcmxhcCBzdWJzdGFudGlhbGx5LgoKKioqKgoKIyMgU2FsYXJ5Ck5vdGU6IEFkZCBhcmd1bWVudCBzdWJzZXQgPSAoZGF0JHNhbGFyeSAhPSAxKSB0byByZW1vdmUgbG93IE4gZ3JvdXAuCmBgYHtyfQpjb3IudGVzdChkYXQkc2FsYXJ5LCBkYXQkZXhwbG9pdGF0dCwgbWV0aG9kID0gInNwZWFybWFuIikKY29yLnRlc3QoZGF0JHNhbGFyeSwgZGF0JGV4cGxvaXRhdHQsIG1ldGhvZCA9ICJrZW5kYWxsIikKYGBgCgpTaWduaWZpY2FudCBuZWdhdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHNhbGFyeSBhbmQgZXhwbG9pdGF0aW9uIGF0dHJpYnV0aW9ucy4KCmBgYHtyfQpjb3IudGVzdChkYXQkc2FsYXJ5LCBkYXQkc2JsbSwgbWV0aG9kID0gInNwZWFybWFuIikKY29yLnRlc3QoZGF0JHNhbGFyeSwgZGF0JHNibG0sIG1ldGhvZCA9ICJrZW5kYWxsIikKYGBgCgpTaWduaWZpY2FudCBuZWdhdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHNhbGFyeSBhbmQgQkxNLgoKYGBge3J9CmNvci50ZXN0KGRhdCRzYWxhcnksIGRhdCRvcmdkZWh1bSwgbWV0aG9kID0gInNwZWFybWFuIikKY29yLnRlc3QoZGF0JHNhbGFyeSwgZGF0JG9yZ2RlaHVtLCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKU2lnbmlmaWNhbnQgbmVnYXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBzYWxhcnkgYW5kIG9yZ2FuaXphdGlvbmFsIGRlaHVtYW5pemF0aW9uLgoKYGBge3J9CmNvci50ZXN0KGRhdCRzYWxhcnksIGRhdCR3YmF0dCwgbWV0aG9kID0gInNwZWFybWFuIikKY29yLnRlc3QoZGF0JHNhbGFyeSwgZGF0JHdiYXR0LCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKU2lnbmlmaWNhbnQgcG9zaXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBzYWxhcnkgYW5kIHdlbGwtYmVpbmcgYXR0cmlidXRpb25zLgoKIyMjIFZhcmlhYmxlIFByZXBhcmF0aW9uIGZvciBWaXN1YWxpemF0aW9uCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShzYWxhcnkgPSByZWNvZGVfZmFjdG9yKHNhbGFyeSwgYDFgID0gImxlc3MgdGhhbiAkMTAsMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMmAgPSAiJDEwLDAwMCB0byAkMTksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiJDIwLDAwMCB0byAkMjksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNGAgPSAiJDMwLDAwMCB0byAkMzksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNWAgPSAiJDQwLDAwMCB0byAkNDksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgNmAgPSAiJDUwLDAwMCB0byAkNTksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgN2AgPSAiJDYwLDAwMCB0byAkNjksOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOGAgPSAiJDcwLDAwMCBvciBtb3JlIiwgLm9yZGVyZWQgPSBUUlVFKSkKYGBgCgojIyMgU2FsYXJ5IGFuZCBFeHBsb2l0YXRpb24gQXR0cmlidXRpb25zCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJleHBsb2l0YXR0IiwgZ3JvdXB2YXJzID0gInNhbGFyeSIsIG5hLnJtID0gVFJVRSkKYGBgCgpQZXJoYXBzIG9taXQgaW5kaXZpZHVhbHMgd2l0aCBzYWxhcnkgPCAkMTAsMDAwIGR1ZSB0byBsb3cgTi1zaXplPwoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gImV4cGxvaXRhdHQiLCBncm91cHZhcnMgPSAic2FsYXJ5IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzYWxhcnksIHkgPSBleHBsb2l0YXR0LCBncm91cCA9IDEpKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGV4cGxvaXRhdHQgLSBjaSwgeW1heCA9IGV4cGxvaXRhdHQgKyBjaSksIHdpZHRoPS4xKSArCiAgICBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNykpICsKICAgIGxhYnMoeCA9ICJTYWxhcnkiLCB5ID0gIkV4cGxvaXRhdGlvbiBBdHRyaWJ1dGlvbnMiKSArCiAgICB0aGVtZV9jbGFzc2ljKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKTm90ZTogRXJyb3IgYmFycyByZWZsZWN0IGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgpDSXMgZm9yIGxvd2VzdCBzYWxhcnkgZ3JvdXAgZG9lcyBub3QgZml0IHdpdGhpbiB5LXNjYWxlLgoKIyMjIFNhbGFyeSBhbmQgU3VwZXJ2aXNvcidzIEJvdHRvbS1saW5lIE1lbnRhbGl0eQpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJzYWxhcnkiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gInNibG0iLCBncm91cHZhcnMgPSAic2FsYXJ5IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzYWxhcnksIHkgPSBzYmxtLCBncm91cCA9IDEpKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHNibG0gLSBjaSwgeW1heCA9IHNibG0gKyBjaSksIHdpZHRoPS4xKSArCiAgICBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNykpICsKICAgIGxhYnMoeCA9ICJTYWxhcnkiLCB5ID0gIlN1cGVydmlzb3IncyBCb3R0b20tbGluZSBNZW50YWxpdHkiKSArCiAgICB0aGVtZV9jbGFzc2ljKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKCgojIyMgU2FsYXJ5IGFuZCBPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAic2FsYXJ5IiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJzYWxhcnkiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IHNhbGFyeSwgeSA9IG9yZ2RlaHVtLCBncm91cCA9IDEpKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgd2lkdGg9LjEpICsKICAgIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludCgpICsKICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSkgKwogICAgbGFicyh4ID0gIlNhbGFyeSIsIHkgPSAiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iKSArCiAgICB0aGVtZV9jbGFzc2ljKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKCiMjIyBTYWxhcnkgYW5kIFdlbGwtYmVpbmcgQXR0cmlidXRpb25zCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJ3YmF0dCIsIGdyb3VwdmFycyA9ICJzYWxhcnkiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnNvdXJjZSgic3VtbWFyeVNFLlIiKQoKZGF0ICU+JQogIHN1bW1hcnlTRSguLCBtZWFzdXJldmFyID0gIndiYXR0IiwgZ3JvdXB2YXJzID0gInNhbGFyeSIsIG5hLnJtID0gVFJVRSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2FsYXJ5LCB5ID0gd2JhdHQsIGdyb3VwID0gMSkpICsgCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gd2JhdHQgLSBjaSwgeW1heCA9IHdiYXR0ICsgY2kpLCB3aWR0aD0uMSkgKwogICAgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpKSArCiAgICBsYWJzKHggPSAiU2FsYXJ5IiwgeSA9ICJXZWxsLWJlaW5nIEF0dHJpYnV0aW9ucyIpICsKICAgIHRoZW1lX2NsYXNzaWMoKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCmBgYAoKKioqKgoKIyMgRWR1Y2F0aW9uCgpgYGB7cn0KY29yLnRlc3QoZGF0JGVkdSwgZGF0JHNibG0sIG1ldGhvZCA9ICJzcGVhcm1hbiIpCmNvci50ZXN0KGRhdCRlZHUsIGRhdCRzYmxtLCBtZXRob2QgPSAia2VuZGFsbCIpCmBgYAoKU2lnbmlmaWNhbnQgbmVnYXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBlZHVjYXRpb24gYW5kIEJMTS4KCmBgYHtyfQpjb3IudGVzdChkYXQkZWR1LCBkYXQkb3JnZGVodW0sIG1ldGhvZCA9ICJzcGVhcm1hbiIpCmNvci50ZXN0KGRhdCRlZHUsIGRhdCRvcmdkZWh1bSwgbWV0aG9kID0gImtlbmRhbGwiKQpgYGAKClNpZ25pZmljYW50IG5lZ2F0aXZlIGNvcnJlbGF0aW9uIGJldHdlZW4gZWR1Y2F0aW9uIGFuZCBvcmcgZGVodW1hbml6YXRpb24uCgojIyMgVmFyaWFibGUgUHJlcGFyYXRpb24gZm9yIFZpc3VhbGl6YXRpb24KCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShlZHUgPSByZWNvZGVfZmFjdG9yKGVkdSwgYDFgID0gImhpZ2ggc2Nob29sLCBHRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyYCA9ICJhc3NvY2lhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgM2AgPSAiY29sbGVnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDRgID0gIm1hc3RlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA1YCA9ICJkb2N0b3JhbCIsIC5vcmRlcmVkID0gVFJVRSkpCmBgYAoKIyMjIEVkdWNhdGlvbiBhbmQgQkxNCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJzYmxtIiwgZ3JvdXB2YXJzID0gImVkdSIsIG5hLnJtID0gVFJVRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAic2JsbSIsIGdyb3VwdmFycyA9ICJlZHUiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IGVkdSwgeSA9IHNibG0sIGdyb3VwID0gMSkpICsgCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gc2JsbSAtIGNpLCB5bWF4ID0gc2JsbSArIGNpKSwgd2lkdGg9LjEpICsKICAgIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludCgpICsKICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSkgKwogICAgbGFicyh4ID0gIkVkdWNhdGlvbiIsIHkgPSAiU3VwZXJ2aXNvcidzIEJvdHRvbS1saW5lIE1lbnRhbGl0eSIpICsKICAgIHRoZW1lX2NsYXNzaWMoKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCmBgYAoKCiMjIyBFZHVjYXRpb24gYW5kIE9yZyBEZWh1bWFuaXphdGlvbgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiZWR1IiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJvcmdkZWh1bSIsIGdyb3VwdmFycyA9ICJlZHUiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IGVkdSwgeSA9IG9yZ2RlaHVtLCBncm91cCA9IDEpKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgd2lkdGg9LjEpICsKICAgIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludCgpICsKICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoMCw3KSkgKwogICAgbGFicyh4ID0gIkVkdWNhdGlvbiIsIHkgPSAiT3JnYW5pemF0aW9uYWwgRGVodW1hbml6YXRpb24iKSArCiAgICB0aGVtZV9jbGFzc2ljKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKCk5vdGFibHksIGVkdWNhdGlvbiBpcyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gc2FsYXJ5IGFuZCByZXNwb25zaWJpbGl0eSBmb3IgZGlyZWN0IHJlcG9ydHMuCgoqKioqCiMjIFJlc3BvbnNpYmxlIGZvciBEaXJlY3QgUmVwb3J0cwoKUmVzcG9uc2liaWxpdHkgZm9yIGRpcmVjdCByZXBvcnRzIGNvcnJlbGF0ZWQgd2l0aCB3ZWxsLWJlaW5nIGF0dHJpYnV0aW9ucyBhbmQgb3JnIGRlaHVtYW5pemF0aW9uLgoKIyMjIFZhcmlhYmxlIFByZXBhcmF0aW9uCmBgYHtyfQpkYXQgJTw+JQogIG11dGF0ZShkaXJyZXBvcnQgPSByZWNvZGVfZmFjdG9yKGRpcnJlcG9ydCwgYDFgID0gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDBgID0gIk5vIikpCmBgYAoKIyMjIFJlc3BvbnNpYmlsaXR5IGFuZCBXZWxsLWJlaW5nIEF0dHJpYnV0aW9ucwpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJ3YmF0dCIsIGdyb3VwdmFycyA9ICJkaXJyZXBvcnQiLCBuYS5ybSA9IFRSVUUpCmBgYAoKYGBge3J9CnQudGVzdChkYXQkd2JhdHQgfiBkYXQkZGlycmVwb3J0LCB2YXIuZXF1YWwgPSBUUlVFKQpgYGAKCmBgYHtyfQpzb3VyY2UoInN1bW1hcnlTRS5SIikKCmRhdCAlPiUKICBzdW1tYXJ5U0UoLiwgbWVhc3VyZXZhciA9ICJ3YmF0dCIsIGdyb3VwdmFycyA9ICJkaXJyZXBvcnQiLCBuYS5ybSA9IFRSVUUpICU+JQogIGdncGxvdChhZXMoeCA9IGRpcnJlcG9ydCwgeSA9IHdiYXR0LCBncm91cCA9IGRpcnJlcG9ydCwgZmlsbCA9IGRpcnJlcG9ydCkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjMpICsKICBzY2FsZV9maWxsX2dyZXkoc3RhcnQgPSAuNCwgZW5kID0gLjgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gd2JhdHQgLSBjaSwgeW1heCA9IHdiYXR0ICsgY2kpLCBzaXplID0gMC41LCB3aWR0aCA9IDAuMDcpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKDAsNyksIGJyZWFrcyA9IGMoMTo3KSkgKwogIGxhYnMoeCA9ICJSZXNwb25zaWJpbGl0eSBmb3IgRGlyZWN0IFJlcG9ydHMiLCB5ID0gIkVtcGxveWVlLUNlbnRyaWMgSFIgQXR0cmlidXRpb25zIikgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkgKyBndWlkZXMoZmlsbCA9IEZBTFNFKQpgYGAKTm90ZTogRXJyb3IgYmFycyByZXByZXNlbnQgY29uZmlkZW5jZSBpbnRlcnZhbHMuCgpBbHRob3VnaCB0LXRlc3QgaXMgc2lnbmlmaWNhbnQsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG92ZXJsYXAuCgojIyMgUmVzcG9uc2liaWxpdHkgYW5kIE9yZyBEZWh1bWFuaXphdGlvbgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiZGlycmVwb3J0IiwgbmEucm0gPSBUUlVFKQpgYGAKCmBgYHtyfQp0LnRlc3QoZGF0JG9yZ2RlaHVtIH4gZGF0JGRpcnJlcG9ydCwgdmFyLmVxdWFsID0gVFJVRSkKYGBgCgpgYGB7cn0Kc291cmNlKCJzdW1tYXJ5U0UuUiIpCgpkYXQgJT4lCiAgc3VtbWFyeVNFKC4sIG1lYXN1cmV2YXIgPSAib3JnZGVodW0iLCBncm91cHZhcnMgPSAiZGlycmVwb3J0IiwgbmEucm0gPSBUUlVFKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBkaXJyZXBvcnQsIHkgPSBvcmdkZWh1bSwgZ3JvdXAgPSBkaXJyZXBvcnQsIGZpbGwgPSBkaXJyZXBvcnQpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC4zKSArCiAgc2NhbGVfZmlsbF9ncmV5KHN0YXJ0ID0gLjQsIGVuZCA9IC44KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG9yZ2RlaHVtIC0gY2ksIHltYXggPSBvcmdkZWh1bSArIGNpKSwgc2l6ZSA9IDAuNSwgd2lkdGggPSAwLjA3KSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgbGltaXRzID0gYygwLDcpLCBicmVha3MgPSBjKDE6NykpICsKICBsYWJzKHggPSAiUmVzcG9uc2liaWxpdHkgZm9yIERpcmVjdCBSZXBvcnRzIiwgeSA9ICJPcmdhbml6YXRpb25hbCBEZWh1bWFuaXphdGlvbiIpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMykpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCk5vdGU6IEVycm9yIGJhcnMgcmVwcmVzZW50IGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKQWx0aG91Z2ggdC10ZXN0IGlzIHNpZ25pZmljYW50LCBjb25maWRlbmNlIGludGVydmFscyBvdmVybGFwLgoKKioqKgoK